【头歌-Python】期末测试1-6

目录

第1关:换披萨

第2关:分段函数A

第3关:哥德巴赫猜想

第4关:个人信息提取

第5关:插入位置

第6关:查询省会


第1关:换披萨

任务描述
披萨的尺寸一般分6-15英寸几种,一英寸约等于2.54厘米,将英寸直径乘以2.54即可得出以厘米为单位的直径。例如6寸披萨,即为6乘以2.54,得出结果为15.24厘米。 然而披萨加工时并不是严格到毫米不差的,考虑到加工过程及无效的披萨边,真正的有效直径需要去掉小数点后面数字。例如6寸披萨的标准直径为15.24厘米,实际有效直径一般为15厘米。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

披萨店经常会对顾客说:您订购的某尺寸的披萨卖完了,是否可以更换为多个小尺寸的披萨。例如:您订购的9寸披萨卖完了,可以给您2个6寸的披萨吗?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

假设披萨厚度相同,价格与面积成正比,试问一个m英寸的大披萨至少要更换几个n英寸的小披萨,顾客才不吃亏?

输入格式
输入有2行
第一行输入整数m(英寸),代表订购的大披萨; 第二行输入整数n(英寸),代表推荐更换的小披萨;

输出格式
整数,更换小披萨的数量

示例
输入:
9
6
输出:
3

参考代码:

import math

def calculate_pizza_area(diameter_cm):
    radius_cm = diameter_cm / 2
    area_cm2 = math.pi * (radius_cm ** 2)
    return area_cm2

def main():
    # 输入大披萨和小披萨的直径(英寸)
    m_inch = int(input())
    n_inch = int(input())

    # 将英寸转换为厘米
    m_cm = m_inch * 2.54
    n_cm = n_inch * 2.54

    # 计算大披萨和小披萨的面积
    m_area = calculate_pizza_area(m_cm)
    n_area = calculate_pizza_area(n_cm)

    # 计算需要多少个小披萨才能达到或超过大披萨的面积
    num_small_pizzas = math.ceil(m_area / n_area)

    print(num_small_pizzas)

if __name__ == "__main__":
    main()

第2关:分段函数A

任务描述

按照上面的分段函数,对输入的整数x,输出对应的y值。对于超出范围的整数x,输出“ERROR”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

本题保证测试数据中x均为整数。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入一个整数,表示x的值‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输出y的值或者“ERROR”

示例1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:12
输出:ERROR

示例2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:6
输出:36

参考代码:

x = int(input())
if x > 10 or x < -10:
    print("ERROR")
else:
    if 0 <= x < 6:
        y = x + 14
    elif 6 <= x <= 10:
        y = 6 * x
    else:
        y = 2 * x * x * x + 4 * x * x + 3
    print(y)

第3关:哥德巴赫猜想

任务描述
1742年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于2的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如:24=5+19,其中5和19都是素数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入一个正整数N,当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出'Data error!' 。

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入一个正整数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出'Data error!' 。

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:30
输出:
30=7+23
30=11+19
30=13+17

示例 2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:77
输出:
Data error!

参考代码:

def is_prime(n):
    """判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
    #=======================================================
    # 补充你的代码
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True
    #=======================================================

    
def goldbach_conjecture(num):
    """ 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
    当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
    有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
    参数为奇数或小于4时,输出'Data error!'
    """
    #=======================================================
    # 补充你的代码
    if num < 4 or num % 2 != 0:
        print('Data error!')
        return
    
    # 找到所有的素数,直到num
    primes = [i for i in range(2, num + 1) if is_prime(i)]
    
    # 存储结果
    results = []
    
    # 遍历所有素数,寻找符合条件的组合
    for p in primes:
        q = num - p
        if q >= p and is_prime(q):  # 确保 p <= q
            results.append(f"{num}={p}+{q}")

    # 打印所有结果
    for result in results:
        print(result)

    #=======================================================

if __name__ == '__main__':
    positive_even = int(input())        # 输入一个正数
    goldbach_conjecture(positive_even)

 

第4关:个人信息提取

任务描述
用户输入自己的个人信息,格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

0122923450321 王昊 法学1801 河北 2001年‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

数据分别表示:学号 姓名 专业班级 籍贯 出生年份,各数据间空格间隔‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

有些用户没有按照规则输入数据,输入自己出生年份的时候写成了类似‘1900年生’或‘出生于1985’或‘19岁生于2006年11月’的数据格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

请注意程序仍然需要正确读取该项数据,本题保证这些用户输入时一定只含有1个4位数字连续组成的年份数据。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

请按照输出样式输出姓名,班级,出生年份呢‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

提示:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

列表中的数据和字符串当中的字符一样,都具有有序的索引,且引用数据和切片方式一致。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

str.isdigit()可以帮助判断字符串是否全部由数字字符组成,返回值为'True'或'False'

输入示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
0122923450321 王昊 法学1801 河北 2001年

输出示例
姓名:王昊 班级:法学1801 出生:2001年

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:
0122923450321 王昊 法学1801 河北 2001年
输出:
姓名:王昊
班级:法学1801
出生:2001年
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪

 参考代码:

import re

def main():
    # 读取用户输入
    user_input = input().strip()
    
    # 分割输入为各部分
    parts = user_input.split()
        
    # 提取学号(我们实际上不需要使用它)
    student_id = parts[0]
    
    # 姓名
    name = parts[1]
    
    # 班级
    class_name = parts[2]
    
    # 籍贯
    hometown = parts[3]
    
    # 出生年份,可以使用正则表达式提取出四位数年份
    year_match = re.search(r'\d{4}', ' '.join(parts[4:]))  # 这里将剩余部分连接起来搜索
    if year_match:
        birth_year = year_match.group() + '年'  # 加上“年”字
    
    # 输出结果
    print(f"姓名:{name}")
    print(f"班级:{class_name}")
    print(f"出生:{birth_year}")

if __name__ == '__main__':
    main()

第5关:插入位置

任务描述
对一个有序的整数序列,现在要将一个整数插入进去,并保证该序列仍然有序。请输出这个数要插入的位置‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第一行输入若干个整数,以空格间隔,本题保证用例中输入的数值顺序一定是从小到大,原始列表中无重复数据‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

第二行输入一个整数n‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

将整数序列放入列表ls‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

如果ls中已经存在n,则不插入该数,输出 Fail以及ls列表‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

若ls中可以插入n,输出插入位置(从0开始计数),以及插入后的ls列表

示例‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:
1 2 3 5
4
输出:
3
[1, 2, 3, 4, 5]
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪

 参考代码:

def insert_into_sorted_list():
    # 读取输入,第一行为有序整数序列
    input_list = input().strip().split()
    # 将输入的字符串转化为整数列表
    ls = list(map(int, input_list))
    
    # 读取要插入的整数n
    n = int(input().strip())
    
    # 检查n是否已经在ls中
    if n in ls:
        print("Fail")
        print(ls)
        return
    
    # 找到插入位置
    insert_pos = 0
    while insert_pos < len(ls) and ls[insert_pos] < n:
        insert_pos += 1
    
    # 在合适的位置插入n
    ls.insert(insert_pos, n)
    
    # 输出插入位置和插入后的列表
    print(insert_pos)
    print(ls)

# 调用函数
insert_into_sorted_list()

第6关:查询省会

任务描述
有诗云:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。中国各省、直辖市、自治区和特别行政区的字典数据如下: 


设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。程序可以重复接收用户输入,直接输入回车时退出程序。

输入格式
一个或多个输入
每行输入一个省、直辖市、自治区或特别行政区名称
最后一行输入一个回车

输出格式
输出对应的省会名称

示例 1
输入:
新疆
北京

输出:
乌鲁木齐
北京

参考代码: 

def main():
    # 定义中国各省、直辖市、自治区和特别行政区及其省会的字典
    capitals = {
        '湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁',
        '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原',
        '江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨',
        '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州',
        '吉林': '长春', '安徽': '合肥', '四川': '成都', '西藏': '拉萨',
        '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口',
        '甘肃': '兰州', '陕西': '西安', '内蒙古': '呼和浩特', '台湾': '台北',
        '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆',
        '香港': '香港', '澳门': '澳门'
    }
    
    while True:
        # 接收用户输入
        province = input().strip()
        # 判断输入是否为空
        if province == "":
            break
        # 输出对应的省会或错误信息
        if province in capitals:
            print(capitals[province])
        else:
            print("输入错误")

main()

番外:第7、8关在主页的另两篇文章里喔~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值