跳至主要內容

薇念约 1642 字

title:练习题-函数 date: 2025-8-06 00:00:00

写一个函数,判断一个数是否为质数。

def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False

    for i in range(3, int(n**0.5)+1, 2):
        if n % i == 0:
            return False
    return True
print(is_prime(12))
print(is_prime(13))
print(is_prime(14))
print(is_prime(15))

写一个函数,将用户输入的任意多个数字相加(使用 *args)。

def sum_numbers(*args):
    return sum(args)
print(sum_numbers(1, 2))

写一个函数,接收姓名与年龄,打印欢迎信息。

def welcome_user(name, age):
    print(f'Welcome {name}, your age is {age}')

welcome_user('Juzi', 25)

写一个装饰器,计算函数运行时间。

@timer 就是应用装饰器,相当于 example_function = timer(example_function)*args, **kwargs 可以让装饰器支持带任意参数的函数。

time.time() 精确到秒,如果需要更高精度可以用 time.perf_counter()import time
def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        duration = end - start

        print(f'函数{func.__name__}执行时间:{duration:.6f}秒')
        return result
    return wrapper
@timer
def example_function():
    total = 0
    for i in range(1000000):
        total += i
    return total
print(example_function())

写一个函数,统计文本中每个单词的频率。

def count_word_frequency(text):
    """
    统计文本中每个单词的频率
    :param text: 输入的字符串文本
    :return: 一个字典,键为单词,值为出现的次数
    """
    word_count = {}

    # 清洗文本:去除标点符号,并转换为小写
    words = text.lower().split()
    cleaned_words = [word.strip('.,!?;:"()[]') for word in words]

    # 统计频率
    for word in cleaned_words:
        if word:
            word_count[word] = word_count.get(word, 0) + 1

    return word_count


text = "The quick brown fox jumps over the lazy dog. The dog was not amused."
result = count_word_frequency(text)

for word, freq in result.items():
    print(f"{word}: {freq}")

简易学生选课系统

  1. 有一组学生账号(4 个学生,用字典存储),每个学生可以选择若干课程(用元组存储, 包含羽毛球、网球、乒乓球、篮球、排球)。
  2. 输入选课的用户名密码进行登录
    • 登录失败执行重新登录。
    • 登录成功进入选课页面;每个学生需要选择 3 门课,选择完成后提示选课完成,输出该学生选择的课程后自动退出系统。
    • 退出系统后继续重复这个流程,直到4个学生都选完课。
    • 打印四个学生的名字和选择的课程。
  3. 要求用户可以输入一个课程名,输出选了这门课的所有学生名称
students = {'zhangsan': {'password': '123456', 'courses': ()},
    'lisi': {'password': '654321', 'courses': ()},
    'wangwu': {'password': '111111', 'courses': ()},
    'zhaoliu': {'password': '222222', 'courses': ()},
            }

# 可选课程(用元组接收)
available_courses = ('羽毛球', '网球', '乒乓球', '篮球', '排球')

# 已完成选课的学生(集合接收)
completed = set()

def login():
    """
    用户登录函数
    """
    while True:
        username = input("请输入用户名:")
        password = input("请输入密码:")

        if username in students and students[username]['password'] == password:
            if username in completed:
                print("你已经选过课,不能重复登录!")
                continue
            print(f"欢迎 {username} 登录成功!")
            return username
        else:
            print("用户名或密码错误,请重新输入!")

def choose_courses(username):
    """
    选课函数,用户需选择 3 门不同的课程
    """
    print(f"可选课程:{', '.join(available_courses)}")
    selected = []

    while len(selected) < 3:
        course = input(f"请输入第 {len(selected)+1} 门课程:")
        if course not in available_courses:
            print("该课程不存在,请重新输入!")
        elif course in selected:
            print("不能重复选择同一门课程!")
        else:
            selected.append(course)

    students[username]['courses'] = tuple(selected)
    completed.add(username)
    print(f"{username} 选课完成:{', '.join(selected)}\n系统已自动退出。\n")

def print_all_choices():
    """
    输出所有学生的选课信息
    """
    print("所有学生选课结果如下:")
    for name, info in students.items():
        print(f"{name}: {', '.join(info['courses'])}")

def query_course():
    """
    用户查询某门课程被哪些学生选择
    """
    course_name = input("请输入要查询的课程名:")
    found = False
    for name, info in students.items():
        if course_name in info['courses']:
            print(name)
            found = True
    if not found:
        print("没有学生选择该课程。")

# 主流程
while len(completed) < 4:
    user = login()
    choose_courses(user)

print_all_choices()

# 查询课程
while True:
    query_course()
    again = input("是否继续查询?(y/n): ")
    if again.lower() != 'y':
        print("系统退出。")
        break

简易学生成绩管理系统

  1. 用户连续输入若干学生及其成绩(格式为 "张三,88" ,存入字典中),直到输入 "end" 结束。
  2. 输出所有学生名称、成绩、排名(按列表排序)。
  3. 输出所有不及格(<60)学生名单。
  4. 输出去重后的所有成绩集合。

简易商品管理

# id: 主键id, name: 商品名, price: 价格, stock: 库存数量
products = [
{"id": 101, "name": "嘎啦果", "price": 3.5, "stock": 50},
{"id": 102, "name": "红富士苹果", "price": 4, "stock": 80},
{"id": 103, "name": "百香果", "price": 9.9, "stock": 20},
{"id": 104, "name": "西瓜", "price": 3.98, "stock": 0}
]
  • 输出所有商品名称(使用 list )并输出
  • 查找所有 有库存 的商品(stock > 0),并输出总库存量
  • 查找最贵的商品并输出
  • 用户输入商品名,判断是否存在(使用字符串比较)
  • 统计每个商品名的字母数(使用 len() + 字典)

统计字符串 "The quick brown fox jumps over the lazy dog. The dog was not amused." 中的以下信息。

  • 所有不重复单词(使用 set)
  • 每个单词出现的次数(使用 dict + str.lower() + str.strip())
  • 出现最多的单词及次数
  • 长度大于 3 的单词组成的一个新列表,去重并按字母排序

CRAPS赌博游戏

CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了 7 点或 11 点,玩家胜;玩家第一次如果摇出 2 点、3 点或 12 点,庄家胜;玩家如果摇出其他点数则游戏继续,玩家重新摇骰子,如果玩家摇出了 7 点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。为了增加代码的趣味性,我们设定游戏开始时玩家有 1000 元的赌注,每局游戏开始之前,玩家先下注,如果玩家获胜就可以获得对应下注金额的奖励,如果庄家获胜,玩家就会输掉自己下注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。

购物车比对器

  1. A 和 B 都在网上购物,A 和 B 的账号不是同一个,分别在购物车购物车添加了一批商品(使用输入存储到列表)。
  2. 求 A 和 B 购物车商品中的以下数据。
    • 共同要买的商品(集合交集)
    • 你独自要买的商品(差集)
    • 所有需要买的商品(并集)