湖北师范大学-Python程序设计-python第三章作业(初级)

第1关:判断是否直角三角形

任务描述
输入三个数a,b,c, 判断能否以它们为三个边长构成直角三角形。若能,输出YES,否则输出NO。

输入格式
输入包括三行,每行是一个数字

输出格式
'YES' 或'NO'

示例
输入:
3
4
5
输出:
YES

# 请补充你的代码
a=eval(input())
b=eval(input())
c=eval(input())
a, b, c = sorted([a, b, c])
if a+b<=c or a<=0 :
    print('NO')
elif a*a+b*b==c*c:
    print('YES')
else:
    print('NO')

第2关:今年多少天?

任务描述
闰年366天,其他年份365天。普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
用户输入一个正整数,代表年份,输出该年有多少天?

输入格式
输入一个正整数,表示年份

输出格式
该年的天数

示例 1
输入:1999
输出:365

示例 2
输入:2000
输出:366

# 请补充你的代码
year=int(input())
if year%400==0 or year%4==0 and year%100!=0:
    print('366')
else:
    print('365')

第3关:判断三角形并计算面积

任务描述
输入三个数a,b,c, 判断能否以它们为三个边长构成三角形。若能,输出YES和三角形面积(结果保留2位小数),否则输出NO。

输入格式
输入包括三行,每行是一个数字

输出格式
如果输入的三个数字能够组成三角形的三边,则输出为两行,分别是'YES' 和面积值(结果严格保留2位小数);如果输入的三边不能组成三角形,则输出为'NO'

示例 1
输入:
3.0
4.0
5.0
输出:
YES
6.00

示例2
输入:
2
5
8
输出:
NO

# 请补充你的代码
a=float(input())
b=float(input())
c=float(input())
if a+b>c and a+c>b and b+c>a:
    s=(a+b+c)/2
    area=(s*(s-a)*(s-b)*(s-c))**0.50
    print('YES')
    print(f'{area:.2f}')
else:
    print('NO')

第4关:身高测算

任务描述
测算身高,单位为厘米,公式参考下列:
男性身高=(父亲身高+母亲身高)×1.08÷2
女性身高=(父亲身高×0.923+母亲身高)÷2

性别输入"男"或“女”,本题保证所有测试输入身高数据为整型,输出结果取整。如果性别输入不符合要求,则输出“无对应公式”

输入格式
输入三行数据如下:
父亲身高(厘米)
母亲身高(厘米)
性别

输出格式
计算出的身高数据(厘米,取整)

示例
输入:
183
175

输出:
171

# 请补充你的代码
father_h=int(input())
mother_h=int(input())
child=input()
if child=="男":
    child_h=(father_h+mother_h)*1.08/2
    print(int(child_h))
elif child=="女":
    child_h=((father_h*0.923)+mother_h)/2
    print(int(child_h))
else:
     print(f'无对应公式')

第5关:个税计算器

任务描述
目前我国个人所得税计算公式如下:
应纳个人所得税税额= (工资薪金所得 -五险一金 - 个税免征额)×适用税率-速算扣除数

个税免征额为5000元/月,2018年10月1日起调整后,也就是2018年实行的7级超额累进个人所得税税率表如下:

全月应纳税所得额(含税级距)    税率(%)    速算扣除数
x<3000    3    0
3000<=x<12000    10    210
12000<=x<25000    20    1410
25000<=x<35000    25    2660
35000<=x<55000    30    4410
55000<=x<80000    35    7160
x>=80000    45    15160
请编写一个个税计算器,用户输入为应发工资薪金所得扣除五险一金后的金额,输出应缴税款和实发工资,结果保留小数点后两位。当输入数字小于0时,输出“error”。

输入格式
输入一个表示工资的数值,例如12000.0,此数值为已扣除五险一金后的金额。

输出格式
应缴税款490.00元,实发工资11510.00元。

示例 1
输入:
12000
输出:
应缴税款490.00元,实发工资11510.00元。

示例 2
输入:
20000
输出:
应缴税款1590.00元,实发工资18410.00元。

示例 3
输入:
-10
输出:
error

# 请补充你的代码
n=eval(input())
x=0
if n<0:
    print("error")
else:
    if(0<=n<=5000):
        x=0
    elif(0<n-5000<=3000):
        x=(n-5000)*0.03
    elif(3000<=n-5000<=12000):
        x=(n-5000)*0.1-210
    elif(12000<=n-5000<=25000):
        x=(n-5000)*0.2-1410
    elif(25000<=n-5000<=35000):
        x=(n-5000)*0.25-2660
    elif(35000<=n-5000<=55000):
        x=(n-5000)*0.30-4410
    elif(55000<=n-5000<=80000):
        x=(n-5000)*0.35-7160
    else:
        x=(n-5000)*0.45-15160
    y=n-x
    print('应缴税款'f'{x:.2f}''元,实发工资'f'{y:.2f}''元。')

第6关:判断闰年

任务描述
写一个程序用于判断用户输入的年份是不是闰年,如果是输出True,如果不是输出False。

输入格式
输入一个代表年份的正整数

输出格式
True或False

示例 1
输入:
1900
输出:
False

示例 2
输入:
2000
输出:
True

# 请补充你的代码
year=int(input())
if year%400==0 or year%4==0 and year%100!=0:
    print('True')
else:
    print('False')

第7关:分段函数B

任务描述

按照输入的整数x,输出对应的y值。本题保证所有测试用例均在整数范围内。

输入格式
输入一个整数,表示x的值

输出格式
输出y的值(整数类型)

示例1
输入:
-10
输出:
0

示例2
输入:
0
输出:
1

# 请补充你的代码
import math
 
x=int(input())
if x>=-6 and x<0:
    y=abs(x)+5
elif 0<=x<3:
    y=math.factorial(x)
elif 3<=x<=6:
    y=pow(x,x-2)
else:
    y=0
print(y)

第8关:百分制成绩转换五分制E

任务描述
编写一个学生成绩转换程序,用户输入百分制的学生成绩,成绩大于等于90且小于等于100的输出为“A”,成绩大于或等于80且小于90的输出为“B”,成绩大于或等于70且小于80的输出为“C”,成绩大于或等于60且小于70的输出为“D”,成绩小于60且大于等于0的输出为“E”,如果输出的成绩大于100或小于0,输出'data error!'。

输入格式
输入一个数字,代表百分制成绩。

输出格式
A、B、C、D、E中的一个字母,表示五分制的成绩等级;或输出'data error!'

示例
输入:
88
输出:
B

输入:
-5
输出:
data error!

# 请补充你的代码
grade = eval(input())
if grade < 0 or grade > 100:
    result = "data error!"
elif grade >= 90:
    result = "A"
elif grade >= 80:
    result = "B"
elif grade >= 70:
    result = "C"
elif grade >= 60:
    result = "D"
else:
    result = "E"
print(result)

第9关:正负交错数列前n项和

任务描述
1-1/2+2/3-3/5+4/8-5/13+...的前n项和,n由用户输入(n>0),结果用str.format()方法保留小数点后6位数字输出。

输入格式
一个正整数

输出格式
前n项的和

示例 1
输入:
12
输出:
0.828448

# 请补充你的代码
n = int(input())
result = 1
sign = -1
pre,cur = 1,1
for i in range(1,n):
    pre,cur = cur,pre + cur
    result = result + sign * i / cur
    sign = -sign
print('{:.6f}'.format(result))

第10关:求数列前n项的平方和

任务描述
现有数列:1,2,3,4,……,n,计算并输出其前n项的平方和,即求:

1×1+2×2+3×3+……+n×n的和。

输入
输入一个正整数 n

输出
数列前n项的平方和

示例
输入
3
输出
14

# 请补充你的代码
num = int(input())
sum = 0
for i in range(1, num+1):
    sum = sum + i ** 2
print(sum)

第11关:百钱买百鸡A

任务描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何?

输入格式
该题目没有输入

输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出,数字之间用空格分隔;
如果有多组解时,按鸡翁数量由少到多输出;

示例
输出:
x xx xx
x xx xx
xx x xx

# 请补充你的代码
a,b,c = 0,0,0
count = 0
for cock in range(1,20):
    for hen in range(1,34):
        chick = 100 - cock - hen
        if cock * 5 + hen * 3 + chick / 3 == 100:
            print('{} {} {}'.format(cock, hen, chick))

第12关:用户登录C

任务描述
实现用户输入用户名和密码,当用户名为admin或administrator且密码为012345时,显示登录成功,否则显示登录失败,登录失败时允许重复输入三次。

输入格式
用户在两行里分别输入用户名和密码

输出格式
登录成功或登录失败

示例 1
输入:
admin
012345
输出:
登录成功

示例 2
输入:
administrator
012345
输出:
登录成功

# 请补充你的代码
for i in range(3):
    user = input()
    pw = input()
    if (user == 'admin' or user == 'administrator') and (pw == '012345'):
        print('登录成功')
        break
    else:
        print('登录失败')

第13关:鸡兔同笼

任务描述
大约在1500年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚,问笼中各有多少只鸡和兔?
请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾)。如无解则输出Data Error!

参考下面的示例代码,从同一行读入两个数
a, b = input().split() # 将输入的以空格分隔的两个数命名为a和b
a, b = map(int,input().split(',')) # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b

输入格式
输入为一行,以空格分隔的两个整数heads, legs,分别代表鸡兔的总头数和总脚数。

输出格式
若有解输出:
有m只鸡,n只兔
若无解输出:
Data Error!

示例 1
输入:
35 94
输出:
有23只鸡,12只兔

示例 2
输入:
-24 12
输出:
Data Error!

示例 3
输入:
12 35
输出:
Data Error!

# 请补充你的代码
h, f = map(int,input().split())
if (h > 0) and (f > 0) and (f >= 2 * h) and  ((f - 2 * h) % 2 == 0):
    r =  (f - 2 * h) // 2
    c = h - r
    print(f'有{c}只鸡,{r}只兔')
else:
    print('Data Error!')

第14关:今天是第几天

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

tips:
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天

# 请补充你的代码
date = input()
list = date.split('/')
year = int(list[0])
month = int(list[1])
day = int(list[2])
dm = [31,28,31,30,31,30,31,31,30,31,30,31]
if year % 400 == 0 or (year % 4 == 0 and year % 100 !=0):
    dm[1] = 29
if month == 1:
    n = day
else:
    n = sum(dm[0:month - 1 ]) + day 
print(f'{year}年{month}月{day}日是{year}年第{n}天')

第15关:中国古代数学问题——物不知数

任务描述
“物不知数”出自《孙子算经》。题目为
意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。
现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。

输入格式
输入为一个正整数n,题目保证 0 < n <= 1000 。

输出格式
输出不超过n且满足条件的物品个数m,如果有多个解,则分行输出,如果无解则输出No solution!。

示例 1
输入:
10
输出:
No solution!

示例2
输入:
200
输出:
23
128

# 请补充你的代码
n=int(input())
flag=0
for i in range(n+1):
    if (i%3==2) and (i%5==3) and (i%7==2):
        flag=1
        print(i)
if flag==0:
    print('No solution!')

第16关:存款买房-B

任务描述
本关任务:编写一个能计算存款买房的小程序。

相关知识
存款买房问题描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。

现根据以下假定来计算你需要多长时间才能攒够首付款:

将你想购买的房子的总价称为 total_cost。

将首付款占总房价的比例称为 portion_down_payment。为简单起见,假设 portion_down_payment = 0.30(30%)。

将存款金额称为 current_savings。你的存款从 0 元开始。

假设你的年薪是 annual_salary,按 12 个月平均发放,单位是元。

假设你每个月都要拿出一定百分比的工资来存首付。称为 portion_saved,此值为一个表示百分比的整数,例如 50 表示 50%。

假定你每 6 个月加一次工资,每半年加薪比例 semi_annual_raise 是一个表示百分比的整数,例如 7 表示 7%,即第 7 个月的月头涨一次工资,工资涨幅为 7%,以后每过 6 个月再涨一次工资。

写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。

编程要求
根据提示,在右侧编辑器补充代码,计算并输出首付款、每年年底已存工资款总数、存够首付的月数 n。

测试说明
输入格式:
输入为四行,每行一个浮点数,分别表示房价、年薪、月存储工资百分数、半年工资涨幅百分数。

输出格式:
输出为若干行,第一行为首付款,最后一行为存够首付的月数 n,中间行是每年年底已存工资款总数(取整)。具体格式见示例。

**示例 1
输入:

5000000
240000
70
7

输出:
首付 1500000.0
第12个月月末有173,880元存款
第24个月月末有372,955元存款
第36个月月末有600,876元存款
第48个月月末有861,823元存款
第60个月月末有1,160,582元存款
第72个月月末有1,502,630元存款
需要72个月可以存够首付

"""
1.让用户输入半年度加薪的整数百分比,例如输入7表示每半年加薪7%。
2.第6个月后,按该百分比增加薪资。在第12个月、18个月之后,依此类推(只有在第6、12、18……等月份时才加薪)。
"""
"""
1.让用户输入半年度加薪的整数百分比,例如输入7表示每半年加薪7%。
2.第6个月后,按该百分比增加薪资。在第12个月、18个月之后,依此类推(只有在第6、12、18……等月份时才加薪)。
写一个程序计算需要多少个月才能攒够钱付首付款。与之前一样,假设所需的首付款百分比为0.30(30%)。
你的程序要给出以下提示并要求用户输入相应的数值:
1. 请输入总房价:total_cost
2. 请输入年薪:annual_salary
3. 请输入月存款比例:portion_saved
4. 每半年加薪比例:semi_annual_raise
测试用例
请输入总房价:1000000
请输入年薪:156800
请输入月存款比例:60
请输入加薪比例:7
输出:需要33 个月可以存够首付
"""

total_cost = float(input())         # total_cost为当前房价
annual_salary = float(input())        # 年薪
portion_saved = float(input()) / 100  # 月存款比例,输入30转为30%
semi_annual_raise = float(input()) /100     # 输入每半年加薪比例,输入7转化为7%
 
portion_down_payment = 0.3      # 首付比例,浮点数
 
###################################Begin###################################
# 补充你的代码                                                       # 首付款
###################################Begin###################################
down_payment=total_cost*portion_down_payment
print('首付',down_payment)
 
current_savings = 0                                # 存款金额,从0开始
number_of_months = 0
monthly_salary = annual_salary/12 #月工资
monthly_deposit = monthly_salary * portion_saved               # 月存款
# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
###################################Begin###################################
#补充代码                                                                    
while current_savings<down_payment:
    number_of_months=number_of_months + 1
    current_savings=current_savings + monthly_deposit
    if number_of_months %6 == 0:
        monthly_salary=monthly_salary*(1+semi_annual_raise)
        monthly_deposit=monthly_salary*portion_saved
 
 
                                                       
###################################Begin###################################
    if number_of_months % 12 == 0:
        print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))
 
 
print(f'需要{number_of_months}个月可以存够首付')

第17关:中国古代数学问题——二鼠打洞

任务描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?

这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

请编程求此题的解,要求使用循环来完成,不允许使用幂运算。

输入格式
输入为1个整数wall,代表墙的厚度,单位为尺。

输出格式
输出为两行,第一行输出1个整数,表示相遇时所需的天数
第二行输出 2 个数字,分别为小鼠和大鼠打洞的距离,单位为尺,若计算结果是浮点数保留小数点后 1 位数字。
(提示:本题输出结果时必须使用round函数,注意计算结果可能是整数)

round()函数说明:
当round(f,n)函数对浮点数f保留小数点后n位时,得到的数据值为浮点数数值形式。

round(3.1415,3)  # 结果是3.142
由于返回的是数值形式,因此计算后输出会以最短的浮点数形式输出,如:

round(1.999,2)  # 结果不是2.00,而是2.0
当round(f,n)函数对整数f保留小数点后n位时,得到的数据仍为整数类型。

round(5,4) 
5
示例 1
输入:
10
输出:
4
1.8 8.2

示例2
输入:
2
输出:
1
1 1

wall=int(input())
b_m,s_m,d,t=1,1,0,1
d_b_m,d_s_m=0,0
while wall>0:
  if wall-b_m-s_m<0:
    t=wall/(b_m+s_m)
  wall=wall-b_m-s_m
  d_b_m=d_b_m+t*b_m
  d_s_m=d_s_m+t*s_m
  b_m=2*b_m
  s_m=s_m/2
  d=d+1
print(d)
print(round(d_s_m,1),round(d_b_m,1))

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值