Datawhale聪明办法学Python(竞赛题解版)
一、课程基本结构
课程开源地址:课程进度列表 - 聪明办法学 Python 第二版
章节结构:
- Chapter 0 安装 Installation
- Chapter 1 启航 Getting Started
- Chapter 2 数据类型和操作 Data Types and Operators
- Chapter 3 变量与函数 Variables and Functions
- Chapter 4 条件 Conditionals
- Chapter 5 循环 Loop
- Chapter 6 字符串 Strings
二、竞赛题解
直接写题了。。。。注意验证后提交,不然不算分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
1、小鲸鱼的 Lucky Word
def is_prime(n):if n < 2:return Falsefor i in range(2, int(math.sqrt(n)) + 1):if n % i == 0:return Falsereturn Truedef check_lucky_word(word):# 计算每个字母的出现次数letter_counts = [word.count(letter) for letter in set(word)]# 找到出现次数最多和最少的字母的次数max_count = max(letter_counts)min_count = min(letter_counts)# 计算差值diff = max_count - min_count# 判断差值是否为质数if is_prime(diff):return "Lucky Word", diffelse:return "No Answer", 0# 从输入中获取单词
word = input()# 调用函数检查单词是否是Lucky Word并打印结果
result, diff = check_lucky_word(word)
print(result)
print(diff)
2.哥德巴赫猜想 改编自 洛谷 P1304 哥德巴赫猜想
def is_prime(n):if n < 2:return Falsefor i in range(2, int(math.sqrt(n)) + 1):if n % i == 0:return Falsereturn Truedef goldbach_conjecture(n):results = []for i in range(4, n+1, 2):for j in range(2, i//2 + 1):if is_prime(j) and is_prime(i-j):results.append((i, j, i-j))breakreturn results# 从输入中获取偶数N
N = int(input())# 调用函数验证哥德巴赫猜想并打印结果
results = goldbach_conjecture(N)
for result in results:even_num, prime1, prime2 = resultprint(f"{even_num}={prime1}+{prime2}")
3.不高兴的小鲸鱼
def check_whale_schedule(schedule):max_unhappiness = 0unhappiest_day = 0for day, (school_hours, mom_hours) in enumerate(schedule, start=1):total_hours = school_hours + mom_hours# 计算不高兴程度unhappiness = max(0, total_hours - 8)# 更新最大不高兴程度和对应的天数if unhappiness > max_unhappiness:max_unhappiness = unhappinessunhappiest_day = dayreturn unhappiest_day# 从输入中获取每天的上课时间和安排时间
schedule = []
for _ in range(7):school_hours, mom_hours = map(int, input().split())schedule.append((school_hours, mom_hours))# 调用函数检查小鲸鱼的日程安排并打印结果
result = check_whale_schedule(schedule)
print(result)
4.小鲸鱼的游泳时间 改编自 洛谷 P1425 小鱼的游泳时间
def calculate_swimming_time(start_hour, start_minute, end_hour, end_minute):# 将开始时间和结束时间转换为分钟数start_time = start_hour * 60 + start_minuteend_time = end_hour * 60 + end_minute# 计算游泳时间total_time = end_time - start_time# 将总时间转换为小时和分钟hours = total_time // 60minutes = total_time % 60return hours, minutes# 从输入中获取开始时间和结束时间
start_hour, start_minute, end_hour, end_minute = map(int, input().split())# 调用函数计算游泳时间并打印结果
result = calculate_swimming_time(start_hour, start_minute, end_hour, end_minute)
print(result[0], result[1])
5.改编自 NOIP 2017 普及组 T1
def calculate_score(scores):weights = [0.2, 0.3, 0.5]total_score = sum(score * weight for score, weight in zip(scores, weights))return int(total_score)# 从输入中获取三个成绩
scores = list(map(int, input().split()))# 调用函数计算最终成绩并打印结果
result = calculate_score(scores)
print(result)
三、总结
最后的竞赛撒花,通过半个月的复习,加深了对python的印象,不知道当时约定好一起学习python的小伙伴还在一起学习,每次都会写在笔记里的,希望大家坚持下去,不仅是分享这份开源,更是分享自己的成长,抽时间出来和大家学习讨论还是挺有意义的,希望以后还会有这个心气去完成后续课程的学习,另外鼓励更多的小伙伴加入到DataWhale的开源当中去,构建开源生态,最后借此机会,祝DataWhale越来越好,五周年生日快乐。。。。