2022年 11月 5日

Python入门之综合实训 python实训作业

第1关:表达式计算

任务描述

####编程要求 直接在print_()中填入正确的表达式,输出该题的答案,答案占一行,无需空行!

参考答案:

  1. def print_(x):
  2. if type(x) == float:
  3. print("%.4f" % x)
  4. else:
  5. print(x)
  6. #请在print_函数中输入正确的表达式
  7. #**********Program**********
  8. print_(1.01**3+0.99**2>1.01)
  9. #********** End **********

第2关:基本数学函数

任务描述

编程要求

右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写python代码即可。

参考答案:

  1. from math import *
  2. def print_(x):
  3. if type(x) == float:
  4. print("%.4f" % x)
  5. else:
  6. print(x)
  7. #请在print_语句内完成题目所需的表达式
  8. #**********Program**********
  9. print_(sinh(0.25))
  10. print_((e**0.25-e**-0.25)/2)
  11. #********** End **********

第3关:地球上两点距离计算

任务描述

编程要求

输出格式已经在print_()函数中进行了定义,完成计算后调用print_()函数进行结果的输出!

参考答案:

  1. from math import *
  2. def print_(x):
  3. if type(x) == float:
  4. print("%.4f" % x)
  5. else:
  6. print(x)
  7. for (x1,y1,x2,y2) in [(48.87,-2.33,37.8,-122.4),(40.89,116.50,37.8,-122.4),(40.89,116.50,48.87,-2.33)]:
  8. # 请在下面编写代码
  9. x1=radians(x1)
  10. y1=radians(y1)
  11. x2=radians(x2)
  12. y2=radians(y2)
  13. dist=69.1105*1.609*degrees(acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2)))
  14. # 请不要修改下面的代码
  15. print_(dist)

第4关:找最大最小数

任务描述

裁判对每个孩子的表现给一个分数(最高分100,最低分0)。总评分的计算规则是:去掉最高分(如果有一个以上的最高分,只去掉一个),去掉最低分(如果有一个以上的最低分,只去掉一个),剩下分数的平均分作为总评分。编程输出总评分(四舍五入,保留2位小数)。 例如: 5个分数分别为99、96、93、80、94,则程序输出为:94.33 5个分数分别为42, 71, 70, 77, 7,则程序输出为:61.0 请在programend之间编写ave( )函数用于实现对平均分的计算,返回的结果建议用round()函数进行处理,结果保留2位小数。 round()用法: a = 12.4584 b = round(a,2) 则b = 12.46 a = 12.000 b = round(a,2) 则b = 12.0

编程要求

对于计算结果,保留两位小数,如果后两位均为0,则输出一个0即可,如上述的61.0!

参考答案:

  1. from math import *
  2. import random
  3. #请完成此函数,求解平均分(保留两位小数,若最后一位小数为0,可忽略)
  4. #**********Program**********
  5. def ave(list0):
  6. list0.sort()
  7. del list0[0]
  8. del list0[3]
  9. return round(sum(list0)/3.00,2)
  10. #********** End **********
  11. #请不要修改下面的代码
  12. if __name__ == '__main__':
  13. for score_list in [[65, 4, 94, 71, 0], [99, 27, 76, 88, 68],
  14. [42, 71, 70, 77, 7], [70, 72, 11, 69,36],
  15. [3, 53, 3, 54, 29]]:
  16. score = ave(score_list)
  17. print(score)

第5关:整数的各位数字处理

任务描述

函数count_digit统计一个非负整数n中某个数字d出现的次数并返回,例如12335中3出现的次数为2,7出现的次数为0。 实现该函数。

编程要求

具体输出格式已经设定好,只需要设定函数返回值即可。 count_digit 统计n中数字d的出现次数,例如出现0次则返回0,出现100次则返回100。

参考答案:

  1. from math import *
  2. import random
  3. import sys
  4. #请完成此函数,统计一个非负整数n中数字d出现的次数并返回
  5. #**********Program**********
  6. def count_digit(n,d):
  7. n=str(n)
  8. d=str(d)
  9. return n.count(d)
  10. #********** End **********
  11. #请不要修改下面的代码
  12. if __name__ == '__main__':
  13. n = [
  14. 8779412003529881091, 6119903205806761585, 8337567880965015796,
  15. 7251609318673317735, 1163206447991023362
  16. ]
  17. d = [7, 4, 6, 9, 3]
  18. for i in range(0, 5):
  19. num = count_digit(n[i], d[i])
  20. print(num)

第6关:身份证合法性判断

任务描述

一个合法的身份证号码由17位地区、生日编号和顺序编号加1位校验码(第18位)组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10, 5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系通过Z值获取对应的校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2 编写函数valid判定一个身份证号码是否有效,有效则返回1,否则返回0。例如”650402199007055298”是一个有效的身份证号,返回1;而”53072419770421191”则不是,则返回0. 实现该函数。

编程要求

具体输出格式已经设定好,只需要函数返回值即可。 函数valid根据传入身份证号进行判断,若有效则返回1,否则返回0.

参考答案:

  1. from math import *
  2. #请完成此函数,判定一个身份证号码是否有效,有效则返回1,否则返回0
  3. #**********Program**********
  4. def valid(ID):
  5. str0=ID[0:17]
  6. if len(ID)!=18 or not str0.isdigit():
  7. return 0
  8. xiaoyan=0
  9. list0=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  10. for i in range(17):
  11. xiaoyan+=int(str0[i])*list0[i]
  12. Z=xiaoyan%11
  13. if Z==0 and Z==1:
  14. M=str(1-Z)
  15. elif Z==2:
  16. M='X'
  17. else:
  18. M=str(12-Z)
  19. if M==ID[17]:
  20. return 1
  21. else:
  22. return 0
  23. #********** End **********
  24. #请不要修改下面的代码
  25. if __name__ == '__main__':
  26. ID_list = [
  27. '330702196302260412X', '34052419800101001X', '340524198001010011',
  28. '3307021963X226041X', '33070219630226041X'
  29. ]
  30. for i in range(0, 5):
  31. print(valid(ID_list[i]))

第7关:字符串处理

任务描述

编写函数count统计以‘#’结束的字符串中每种数字字符的个数和其它字符的个数。函数参数str是以‘#’结束的字符串,统计结果存入数组c中,字符0-9的个数分别存入c[0]-c[9]中,其它字符个数存入c[10]中。如”123hgasf342240#”中数字0-9的个数分别为1,1,3,2,2,0,0,0,0,0个,其它字符个数为5。 完成函数count的编写。

编程要求

输入字符串为”123hgasf342240#”,则输出为统计结果列表: [1,1,3,2,2,0,0,0,0,0]

参考答案:

  1. from math import *
  2. import random
  3. import sys
  4. #请完成此函数,统计以‘#’结束的字符串中每种数字字符的个数和其它字符的个数
  5. #**********Program**********
  6. def count(str0,c):
  7. for i in range(len(str0)-1):
  8. if str0[i].isdigit():
  9. c[int(str0[i])]+=1
  10. else:
  11. c[10]+=1
  12. return
  13. #********** End **********
  14. #请不要修改下面的代码
  15. if __name__ == '__main__':
  16. str_list = [
  17. 'C,/7>?2C650>?#', 'F=C?D(,27,.&38$#', '/B738CF8>F1E&>D#',
  18. '%/<9&=,55$3#', '+=7$+C=/A&#'
  19. ]
  20. for i in range(0, 5):
  21. c = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  22. count(str_list[i], c)
  23. print(c)

第8关:二维数组处理

任务描述

用Python的列表存储了二维实数数组,编程输出最大的值以及该元素所在位置(如果有多个元素的值均为最大,则输出第一个最大元素的位置)。 例如:二维实数数组[[1, 2, 3, 4, 5], [6, 7, 8, 9,100]] 最大的值是100,所在位置为[1][4]。

编程要求

输出格式如下: 100 1 4

说明:最大值占一行;第二行依次输出元素的行号,空格,列号。

参考答案:

  1. from math import *
  2. import random
  3. import sys
  4. if __name__ == '__main__':
  5. a = [[-96.75406736839875, 112.7935088305457, -233.3428136002151, 47.829216619513204],
  6. [-256.7530027202153, 162.72640239449578, 166.09967176773966, 107.14889508344174],
  7. [69.43600990883988, 37.27554983543564, 139.29912042759844, 126.88684145170981],
  8. [275.9968464170189, 102.96998985338536, 278.03988044640823, -185.49830120316162],
  9. [-232.95272551814065, 122.52826367566519, 289.4673734003288, -299.829647403839],
  10. [217.0741605740095, 1.1891511881970018, 183.20279885926897, 283.7484913702709],
  11. [-0.2667355625993082, -194.83738998408109, 32.12300723531075, 275.9465332547651],
  12. [-102.71352700566422, 95.17176558146599, -141.43257927047773, 173.30335198695275],
  13. [-124.54607782277029, -137.4438601733702, 237.34335287349904, -5.671864434324959]]
  14. #计算最大值以及对应的坐标
  15. #**********Program**********
  16. max=0
  17. r_index,c_index=-1,-1
  18. for i in range(len(a)):
  19. for j in range(4):
  20. if a[i][j]>max:
  21. max=a[i][j]
  22. r_index=i
  23. c_index=j
  24. #********** End **********
  25. print(max)
  26. print(r_index, c_index)

第9关:体重指数计算

任务描述

计算体重指数。 ######男女标准体重有点不一样: 男士标准体重=(身高cm-100)0.9(KG), 女士标准体重=(身高cm-100)*0.9(KG)-2.5(KG) ######判断体重的标准是(男女一样): 正常体重:标准体重加减10%(含等于) 轻度胖瘦:标准体重加减(10%,20%](含20%,不含10%) 中度胖瘦:标准体重加减(20%,40%](含40%,不含20%) 重度胖瘦:标准体重加减超过40%(不含40%) *函数f根据一个人的信息计算体重指数**。其返回值为: 0 – 正常体重;1 – 轻度胖;-1 – 轻度瘦;2 – 中 度胖; -2 – 中度瘦;3 – 重度胖;-3 – 重度瘦。 例如: 一个60kg的176cm的男性为轻度瘦,返回-1; 一个60kg的176cm的女性则为正常体重,返回0。 完成函数f的编写,输入一个人的性别(0:女性 1:男性),身高,体重,返回其体重指数。

编程要求

输出格式已经写好,只需要设定函数返回值即可。 函数f返回体重指数,以0,1,2,3,-1,-2,-3表示。 一个60kg的176cm的男性为轻度瘦,返回-1; 一个60kg的176cm的女性则为正常体重,返回0。

参考答案:

  1. from math import *
  2. import random
  3. #请完成此函数,根据一个人的信息计算体重指数
  4. #**********Program**********
  5. def f(sex,height,weight):
  6. if sex==1:
  7. bztz=(height-100)*0.9
  8. elif sex==0:
  9. bztz=(height-100)*0.9-2.5
  10. jiajian=(weight-bztz)/bztz
  11. if abs(jiajian)<=0.1:
  12. return 0
  13. if jiajian<0:
  14. i=-1
  15. else:
  16. i=1
  17. if 0.1<abs(jiajian)<=0.2:
  18. return 1*i
  19. elif 0.2<abs(jiajian)<=0.4:
  20. return 2*i
  21. else:
  22. return 3*i
  23. #********** End **********
  24. #请不要修改下面的代码
  25. if __name__ == '__main__':
  26. total = [[1, 164.62, 45.95], [0, 185.35, 69.06], [0, 170.0, 66.6], [1, 163.81, 60.0], [0, 186.61, 65.55]]
  27. for i in range(0, 5):
  28. print(f(total[i][0],total[i][1],total[i][2]))

————————分割线————————

本人python小白一枚,对python中的许多方法,函数的使用还不熟练,像第9关,应该还可以再改进,如还有什么不妥之处,还请大佬指点!