约 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}")
简易学生选课系统
- 有一组学生账号(4 个学生,用字典存储),每个学生可以选择若干课程(用元组存储, 包含羽毛球、网球、乒乓球、篮球、排球)。
- 输入选课的用户名密码进行登录
- 登录失败执行重新登录。
- 登录成功进入选课页面;每个学生需要选择 3 门课,选择完成后提示选课完成,输出该学生选择的课程后自动退出系统。
- 退出系统后继续重复这个流程,直到4个学生都选完课。
- 打印四个学生的名字和选择的课程。
- 要求用户可以输入一个课程名,输出选了这门课的所有学生名称
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
简易学生成绩管理系统
- 用户连续输入若干学生及其成绩(格式为 "张三,88" ,存入字典中),直到输入 "end" 结束。
- 输出所有学生名称、成绩、排名(按列表排序)。
- 输出所有不及格(<60)学生名单。
- 输出去重后的所有成绩集合。
简易商品管理
# 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 元的赌注,每局游戏开始之前,玩家先下注,如果玩家获胜就可以获得对应下注金额的奖励,如果庄家获胜,玩家就会输掉自己下注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。
购物车比对器
- A 和 B 都在网上购物,A 和 B 的账号不是同一个,分别在购物车购物车添加了一批商品(使用输入存储到列表)。
- 求 A 和 B 购物车商品中的以下数据。
- 共同要买的商品(集合交集)
- 你独自要买的商品(差集)
- 所有需要买的商品(并集)