Python期末复习题:流程控制

Python期末复习题:流程控制

一、成绩转换

请编写一个成绩转换程序。每次输入一个百分制的学生成绩,成绩大于或等于90且小于或等于100的输出为“A”,成绩大于或等于80且小于90的输出为“B”,成绩大于或等于70且小于80的输出为“C”,成绩大于或等于60且小于70的输出为“D”,成绩小于60的输出为“E”。

输入数据不合法(大于100或者小于0)时输出“data error!”。

可重复输入成绩进行转换,直接输入回车时结束程序‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入:

每次输入一个浮点数,代表百分制成绩;

重复输入,输入回车时结束程序‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出:

根据每一次的输入值分别输出A、B、C、D、E中的一个字母或"data error!"

while True :
    score = input("请输入一个浮点数,代表百分制成绩:")
    if score != ' ':
        try:
            score = eval(score)
            if score >= 90 and score <= 100:
                print("A")
            elif score >= 80 and score <= 90:
                print("B")
            elif score >= 70 and score <= 80:
                print("C")
            elif score >= 60 and score <= 70:
                print("D")
            elif score > 0 and score < 60:
                print("E")
            else:
                print("data error!")
        except:
            print("data error")
    else:
        break

运行结果是:

请输入一个浮点数,代表百分制成绩:90.9
A
请输入一个浮点数,代表百分制成绩:80.7
B
请输入一个浮点数,代表百分制成绩:70.5
C
请输入一个浮点数,代表百分制成绩:65.6
D
请输入一个浮点数,代表百分制成绩:59
E
请输入一个浮点数,代表百分制成绩:ddd
data error
请输入一个浮点数,代表百分制成绩: 

二、Leibniz公式计算圆周率

历史上有许多计算圆周率Π的公式,其中,格雷戈里和莱布尼茨发现了下面的公式(可由等比数列求和公式变换并积分获得):

1 1 − 1 3 + 1 5 − 1 7 + ⋯ = π 4 \frac{1}{1}-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\cdots=\frac{\pi}{4} 1131+5171+=4π

这个公式累加1项是4.00,累加2项是2.67,累加3项是3.47…趋进于圆周率值。编程对其各项进行累加,直到最后一项的绝对值小于 1 0 − 6 10^{-6} 106为止,输出此时的圆周率值。

import math

sum = 0
fh = 1  
fm = 1
i= 1
while math.fabs(4 / fm) > 0.000001:
    sum += fh * 4 / fm
    fh = fh * (-1)
    fm = fm + 2
    i += 1
print(f"累加次数为{i}")
print(f"Π的值为{sum}")

运行的结果是:

累加次数为2000001
Π的值为3.141592153589724

三、输出回文素数

输出20000以内的所有回文素数。回文数是指正序和逆序均相同的数,例如131;素数是除了1和它本身不能被其他任何数整除的数 。提示:可以编写一个判断素数的函数方便书写程序。

def prime(n):
    """接收正整数n,判断是否为素数,返回布尔值"""
    if n < 2:
        return False       # 0和1不是素数
    for i in range(2, n):  # 遍历(2, n-1)中的数
        if n % i == 0:     # 若在(2, n-1)中存在因子则不是素数
            return False   # 不是素数时返回False
    else:   # for语句遍历(2, n-1)中所有数,未发现因子存在时,才是素数
        return True        # 素数时返回True

for i in range(20000):
    if str(i) == str(i)[::-1] and prime(i):
        print(i,end=' ')

运行的结果是:

2 3 5 7 11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929 10301 10501 10601 11311 11411 12421 12721 12821 13331 13831 13931 14341 14741 15451 15551 16061 16361 16561 16661 17471 17971 18181 18481 19391 19891 19991

四、输出该日期是这一年的第几天

输入年/月/日(用斜杠分隔),输出该日期是这一年的第几天?(本题目保证测试使用的年、月、日都是合法输入)技巧提示:

map()函数可以将多个数据转换成指定数据类型

split()函数可以将字符串按照指定分隔符进行间隔并生成数据列表

a, b, c = map(int, input().split(“:”))

#上述语句可以将输入格式为 “12:30:05” 的字符串分解成[“12”, “30”, “05”]

#并将列表中每个数据转换成整型数据并分别赋值给a,b,c三个变量

示例 1

输入: 2018/2/1 输出: 2018年2月1日是2018年第32天

import datetime
try:
    year, month, day = map(int, input().split("/"))
    target_day = datetime.date(year, month, day)
    day_count = target_day-datetime.date(target_day.year - 1, 12, 31)
    print(f"{year}{month}{day}日是{year}年第{day_count.days}天")
except:
    print("请输入正确的年月日!")

运行的结果是:

2018/2/1
201821日是2018年第32
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值