1. 根据输入的日期,计算该日期是这一年的第几天
defisLeapYear(y): # 判断闰年的函数if (y%4==0andy%100!=0) ory%400==0: # 是闰年 返回TruereturnTrueelse: returnFalse# 否则返回Falsedeffunction1(i, j, k): # 计算给定日期是那一年的第几天leap_year= [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] no_leap_year= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ifisLeapYear(i): result=sum(leap_year[:j-1]) +kelse: result=sum(no_leap_year[:j-1]) +kreturnresult# 规定正确输入为 数字格式:2020/5/26# 有异常处理whileTrue: s=input("请输入日期:") nums=s.split('/') try: year, month, day=int(nums[0]), int(nums[1]), int(nums[2]) # 得到的年月日转成整数 intassert (0<=year<=9999) # 年份不在0-9999范围内 报错assert (0<=month<=12) # 月份不在1-12范围内 报错days=function1(year, month, day) ifmonthin [1, 3, 5, 7, 8, 10, 12]: # 月份在 [1, 3, 5, 7, 8, 10, 12]assert (1<=day<=31) # 判断这个月的天数范围 断言正确 可以计算days=function1(year, month, day) breakelifmonthin [4, 6, 8, 10]: # 月份在 [4, 6, 8, 10]assert (1<=day<=29) # 判断这个月的天数范围 断言正确 可以计算days=function1(year, month, day) breakelifmonth==2: # 2月份 闰年29天 非闰年 28天ifisLeapYear(year): # 闰年assert (1<=day<=29) # 在此范围 正确 可以计算days=function1(year, month, day) breakelse: # 非闰年assert1<=day<=28# 在此范围 正确 可以计算days=function1(year, month, day) breakexceptValueError: # 转int包含非法字符 ValueErrorprint('日期中不能包含非法字符') exceptAssertionError: # assert语句断言不符合数字范围 报错 异常处理 输出print('日期数字范围不正确') print('该日期是这一年的第{}天'.format(days))
测试结果如下:
请输入日期:2020/8/29该日期是这一年的第242天Processfinishedwithexitcode0
2. 猜数游戏
importrandomflag=Truewhileflag: n=random.randint(100, 999) # 生成一个三位的随机数ncount=0# 记已猜的次数whileTrue: m=int(input("请输入一个数:")) ifm>n: print("你输入的数大了") count+=1elifm<n: print("你输入的数小了") count+=1elifm==n: ifcount<=8: print("太聪明了") elifcount<=15: print("还不错") elifcount>15: print("终于猜对了,不容易啊!") print("*"*25, "\n还想再玩一局吗? \n 1.继续请输入yes \n 2.结束请输入no\n", "*"*25) order=input("请输入你的选择: ") iforder=="yes": break# 退出内层循环 开始下一局eliforder=='no': flag=False# 结束整个循环break
3.输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7),(1,8)。重复的元组元素只保留一个,结果按元组第一个元素从小到大顺序输出
defget_tuple(num_list): temp_list= [] foriinnum_list: if (9-i) innum_list: min_= (9-i) if (i>= (9-i)) elseimax_=iifmin_== (9-i) else (9-i) if (min_, max_) notintemp_list: temp_list.append((min_, max_)) returntemp_listnums=input("numbers:") # 列表推导式num_list= [int(i) foriinnums.split(',')] result_list=get_tuple(num_list) # 按列表里每个元组的第一个元素从小到大排序result_list=sorted(result_list, key=lambdax: x[0]) print(result_list)
4. 求输入一组数据的平均值、方差、中位数
nums=input('请输入一组数据:') data=nums.split(',') # 算平均值data= [eval(i) foriindata] # 转成数字类型average=sum(data) /len(data) print('这组数据平均值为:{:.2f}'.format(average)) # 方差计算total=0forvalueindata: total+= (value-average) **2stddev= (total/len(data)) **0.5print('这组数据方差为:{:.2f}'.format(stddev)) # 中位数计算data.sort() # 从小到大排序mid=len(data) //2# 找中位数的索引iflen(data) %2==0: median= (data[mid-1] +data[mid]) /2else: median=data[mid] print('这组数据中位数为:{:.2f}'.format(median))
5. 打印九九乘法表
foriinrange(1, 10): forjinrange(1, i+1): num=j*iprint("{}*{}={:<2}".format(j, i, num), end=" ") ifi==j: print(" ") break
6. 求方程的解
# ax²+bx+c=0a=float(input('输入 a:')) b=float(input('输入 b:')) c=float(input('输入 c:')) ifa==0: x=-c/bprint('方程的解为:x={}'.format(x)) else: delta=b**2-4*a*cifdelta<0: print('No solution!') elifdelta==0: x=-b/ (2*a) print('方程的解为:x={}'.format(x)) else: root=delta**0.5x1= (-b+root) / (2*a) x2= (-b-root) / (2*a) print('方程的两个解为 x1={} x2={}'.format(x1, x2))