第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))