题型:编程题
打卡考勤
大明是学校Python编程社团的管理员,他用Python写了一个打卡考勤的程序,统计不同学生到信息技术教室编程打卡的次数以及未打卡的学生名单。这个程序可以一次输入已打卡学生姓名,用空格隔开,然后程序就会自动统计已打卡学生的名单和次数。如果有未打卡的学生,就输出未打卡的学生的名单,否则输出所有学生都已打卡。请你补全代码,实现上述功能。
# 创建一个空列表来存储打卡的学生姓名
checked_in_list = []
students_input = input("请输入已打卡学生姓名,用空格隔开: ")
# 将输入的学生姓名分割并添加到列表中
students = students_input.split()
checked_in_list. ①
# 将列表转换为集合
checked_in_students = ②
# 创建一个集合存储所有学生总名单
all_students = {"唐僧", "孙悟空", "猪八戒", "沙和尚"}
# 统计打卡的名单和次数
checked_count = {}
for student in checked_in_students:
checked_count[student]=checked_in_list.count(student)
# 输出打卡的学生名单和次数
print("打卡的学生名单和次数:")
for ③ in checked_count.items():
print(f"{student}: {count}次")
# 找出未打卡的学生名单
not_checked_students = list( ④ )
# 输出未打卡的学生名单
if not_checked_students:
print("未打卡的学生名单:")
for student in not_checked_students:
print(student)
else:
print("所有学生都已打卡。")————————示例运行结果——————————
请输入已打卡学生姓名,用空格隔开: 孙悟空 沙和尚 唐僧 唐僧 孙悟空 孙悟空
打卡的学生名单和次数:
唐僧: 2次
孙悟空: 3次
沙和尚: 1次
未打卡的学生名单:
猪八戒
更新时间:2026-01-16 14:14:02
|
【知识点】
电子学会Python五级
抱歉! 您未登录, 不能查看答案和解析点击登录
相似题推荐
单选题
埃氏筛中将内层循环从j = i*i 开始而不是j = 2*i 的主要原因是()。
def eratosthenes_sieve_for(n): if n < 2: return [] is_composite = [False] * (n + 1) primes = [] for i in range(2, n + 1): if is_composite[i]: continue primes.append(i) # 用for循环模拟C++的 j = i*i; j <=n; j +=i for j in range(i * i, n + 1, i): is_composite[j] = True return primes
| A. 因为2*i 一定不是合数 |
B. i*i 一定是质数 |
| C. 小于i*i 的i 的倍数已被更小质因子筛过 |
D. 这样可以把时间复杂度降为O(n) |
2026-09-14
单选题
对如下代码实现的欧几里得算法(辗转相除法),调用gcd(48 , 18) 得到的调用序列为()。
def gcd(a, b): if b == 0: return a else: return gcd(b, a % b)
| A.gcd(48 ,18) -> gcd(18 ,12) -> gcd(12 ,6) -> gcd(6 ,0) | B.gcd(48 ,18) -> gcd(30 ,18) -> gcd(12 ,18) |
| C.gcd(48 ,18) -> gcd(18 ,30) -> gcd(30 ,6) | D.gcd(48 ,18) -> gcd(12 ,18) -> gcd(6 ,12) |
2026-09-14
单选题
下面代码用分治求“最大连续子段和”,其时间复杂度为()。
import sys def solve(a , l , r): if l == r: return a [l] mid = l + (r - l) // 2 left = solve(a , l , mid) right = solve(a , mid + 1 , r) sum_val = 0 lmax = -sys .maxsize - 1 for i in range(mid , l - 1 , -1): sum_val += a [i] lmax = max (lmax , sum_val) sum_val = 0 rmax = -sys .maxsize - 1 for i in range(mid + 1 , r + 1): sum_val += a [i] rmax = max (rmax , sum_val) return max(left , right , lmax + rmax) if __name__ == "__main__": a1 = [-2 , 1 , -3 , 4 , -1 , 2 , 1 , -5 , 4] print(solve(a1 , 0 , len(a1)-1)) a2 = [-5 , -3 , -1 , -4] print(solve(a2 , 0 , len(a2)-1)) a3 = [10] print(solve(a3 , 0 , 0))
| A. O(n2) |
B. O(nlogn) |
| C. O(logn) |
D. O(n) |
2026-09-14
