当前位置:   article > 正文

湖南大学python头歌实训 实验8:函数_头歌平台第二章python语言基础2.5函数答案

头歌平台第二章python语言基础2.5函数答案

第二章-Python语言基础-2.5函数(二)

第1关:函数的参数使用

  1. numbers = []
  2. # str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表
  3. str = input()
  4. lst1 = str.split(' ')
  5. # 将输入的数字字符串转换为整型并赋值给numbers列表
  6. for i in range(len(lst1)):
  7. numbers.append(int(lst1.pop()))
  8. # 请在此添加函数plus的代码,函数参数为一个列表,对列表中的数值元素进行累加求和
  9. # ********** Begin *********#
  10. def plus(n):
  11. return sum(n)
  12. # 调用plus函数,并将返回结果存储到变量d中
  13. d = plus(numbers)
  14. print(d)

第2关:函数的return返回

  1. #coding=utf-8
  2. #输入两个正整数a,b
  3. a = int(input())
  4. b = int(input())
  5. # 请在此添加函数gcd代码,求两个正整数的最大公约数
  6. #********** Begin *********#
  7. def gcd(a,b):
  8. if a<b:
  9. a,b=b,a
  10. y=a*b
  11. y=a%b
  12. while y!=0:
  13. a=b
  14. b=y
  15. y=a%b
  16. return b
  17. #********** End **********#
  18. #调用函数,并输出最大公约数
  19. print(gcd(a,b))

或者你可以help,看下math.gcd(),lol

第3关:函数的使用范围:Python作用域

  1. #coding=utf-8
  2. #输入两个正整数a,b
  3. a = int(input())
  4. b = int(input())
  5. # 请在此添加一个private函数_gcd()求两个正整数的最大公约数
  6. #********** Begin *********#
  7. def _gcd(a,b):
  8. if a>b:
  9. a,b=b,a
  10. y=a%b
  11. while y!=0:
  12. a=b
  13. b=y
  14. y=a%b
  15. return b
  16. #********** End **********#
  17. #请在此添加一个public函数lcm(),在lcm()函数中调用_gcd()函数,求两个正整数的最小公倍数
  18. #********** Begin *********#
  19. def lcm(a,b):
  20. return a*b//_gcd(a,b)
  21. #********** End **********#
  22. #调用函数,并输出a,b的最小公倍数
  23. print(lcm(a,b))

老演员了

第4关:函数综合训练※

  1. import numpy as np
  2. import matplotlib
  3. matplotlib.use('Agg')
  4. import matplotlib.pyplot as plt #导入matplotlib.pyplot
  5. import matplotlib.image as imgplt
  6. # 第一题:求三角形阴影部分面积
  7. # 请编写函数triArea(a ,b , c),返回三角形的面积
  8. def triArea(a ,b , c):
  9. #请在下面编写代码
  10. ######## begin ###########
  11. p=(a+b+c)/2
  12. Area=(p*(p-a)*(p-b)*(p-c))**0.5
  13. ######## end #############
  14. #请不要修改下面的代码
  15. return Area
  16. S1 = triArea(9.8, 9.3, 6.4)
  17. S2 = triArea(2.9, 4.1, 4.7)
  18. S3 = triArea(2.0, 1.4, 2.3)
  19. print('%.6f' %(S1-S2+S3))
  20. print('\n***********************\n')
  21. # 第二题:哥德巴赫猜想
  22. # 请编写函数isPrime(x)。判断x是否为素数,如果是素数则返回True否则返回False
  23. def isPrime(x):
  24. #请在下面编写代码
  25. ######## begin ###########
  26. n=1
  27. for i in range(2,int(x**0.5)+1):
  28. if x%i==0:
  29. n=0
  30. break
  31. if n==0:
  32. return False
  33. else:
  34. return True
  35. ####### end ############
  36. def Goldbach(N): # 将N分解成两素数之和
  37. if N < 6 or N % 2 == 1: # 若N小于6或N为奇数
  38. print('N应该是大于等于6的偶数')
  39. else:
  40. # 循环判断,得到符合要求的小于N的两个素数,并打印
  41. for x in range(2, N //2 + 1): # 想想为什么是从2到N/2
  42. # 调用isPrime函数得到符合要求的小于N的两个素数
  43. ######## begin ###########
  44. if isPrime(x)==True and isPrime(N-x)==True :
  45. ######## end ###########
  46. print(N, '=', x, '+', N - x)
  47. break
  48. for num in [88, 68, 50, 1000]:
  49. Goldbach(num)
  50. print('\n***********************\n')
  51. # 第三题 :信用卡的验证程序
  52. def validCreditCard(num):
  53. #请在下面编写代码
  54. # ********** Begin ********** #
  55. s=0
  56. cnt=0
  57. num1=list(str(num))
  58. num1=num1[::-1]
  59. for i in num1:
  60. cnt+=1
  61. if cnt%2!=0:
  62. s=s+eval(i)
  63. else:
  64. num2=eval(i)*2
  65. num_2=list(str(num2))
  66. for j in num_2:
  67. s=s+eval(j)
  68. valid=s%10==0
  69. # ********** End ********** #
  70. #请不要修改下面的代码
  71. return valid
  72. for num in [1234567, 43589795, 87539319, 123456789]:
  73. valid = validCreditCard(num)
  74. print(valid)
  75. print('\n***********************\n')
  76. #第四题:打印日历
  77. def day(y, m, d):#计算y年m月d日是星期几
  78. # 请在下面编写代码
  79. # ********** Begin ********** #
  80. y0 = y - (14 - m)//12
  81. x = y0 + y0//4 - y0//100 + y0 //400
  82. m0 = m + 12*((14 - m)//12) - 2
  83. d0 = (d + x + 31*m0//12) % 7
  84. # ********** End ********** #
  85. # 请不要修改下面的代码
  86. return d0
  87. def isLeapYear(year): #判断year年是否闰年
  88. # 请在下面编写代码
  89. # ********** Begin ********** #
  90. if year%4==0 and year%100!=0 or y%400==0:
  91. isLeapYear=True
  92. else:
  93. isLeapYear=False
  94. # ********** End ********** #
  95. # 请不要修改下面的代码
  96. return isLeapYear
  97. def calendar(y, m): #打印y年m月日历
  98. print(' {}年{}月'.format(y,m))
  99. print('Su\tM\tTu\tW\tTh\tF\tSa')
  100. # 请在下面编写代码调用函数计算y年m月1日是星期几保存在变量date中
  101. # ********** Begin ********** #
  102. date=day(y,m,1)
  103. # ********** End ********** #
  104. days = 0
  105. # 请在下面编写代码计算y年m月的天数
  106. # ********** Begin ********** #
  107. if m==2:
  108. if isLeapYear(y)==True:
  109. days=29
  110. else:
  111. days=28
  112. elif m in [1,3,5,8,10,12]:
  113. days=31
  114. else:
  115. days=30
  116. # ********** End ********** #
  117. count = date # y年m月1日是星期几
  118. for i in range(date):
  119. print('\t', end='')
  120. for d in range(1, days + 1):
  121. print(str(d) + '\t', end="")
  122. count = (count + 1) % 7
  123. if count == 0:
  124. print()
  125. print()
  126. # 请不要修改下面的代码
  127. for (y,m) in [(2017,8), (2017,10),(2015,8), (2017,2), (2016,2)]:
  128. calendar(y, m)
  129. print('---------------------------')
  130. print('\n***********************\n')

实验十 函数

第1关:定义判断质数的函数

  1. def isprime(a):
  2. #代码开始
  3. flag=1
  4. for i in range(2,int(a**0.5)+1):
  5. if a%i==0:
  6. flag=0
  7. break
  8. if flag==1:
  9. return True
  10. else:
  11. return False
  12. n=eval(input("请输入一个数"))
  13. if isprime(n):
  14. print(n,"是一个质数")
  15. else:
  16. print(n,"不是一个质数")

第2关:绝对质数

  1. from isprime import *
  2. #代码开始
  3. def nx(i):
  4. y=0
  5. while i>0:
  6. y=y*10+i%10
  7. i=i//10
  8. return y
  9. n=0
  10. for i in range(10,99):
  11. if isprime(i):
  12. if isprime(nx(i)):
  13. n=n+1
  14. print(i,end=' ')
  15. if n%3==0:
  16. print('')
  17. #代码结束

第3关:验证哥赫巴德猜想

  1. from isprime import *
  2. #代码开始
  3. def cjr(n):
  4. for i in range(2,int(n/2)+1):
  5. if isprime(i) and isprime(n-i):
  6. print('{:>2}={:>2}+{:>2}'.format(n,i,n-i)+'\t',end='')
  7. break
  8. n=0
  9. for i in range(4,100,2):
  10. n=n+1
  11. cjr(i)
  12. if n%5==0:
  13. print()
  14. #代码结束

第4关:判断三角形类型

  1. def triangle_type(a, b, c):
  2. # 判断是否能构成三角形
  3. li = [a,b,c]
  4. a=li[0]
  5. c=li[2]
  6. b=li[1]
  7. if a + b <= c :
  8. print("不能构成三角形")
  9. # 判断是否为等边三角形
  10. elif a == c:
  11. print("等边三角形")
  12. # 判断是否为等腰三角形
  13. elif a == b or b == c :
  14. print("等腰三角形")
  15. # 判断是否为直角三角形
  16. elif a**2 + b**2 == c**2:
  17. print("直角三角形")
  18. else:
  19. print("一般三角形")
  20. a = eval(input())
  21. b = eval(input())
  22. c = eval(input())
  23. m = triangle_type(a, b, c)

第5关:成语字典精确查询

  1. cyzd={}
  2. def cyjl():
  3. f1=open("sy10//成语.txt","r",encoding="utf8")
  4. #代码开始
  5. for line in f1:
  6. line=line.strip()
  7. n=line.find("拼")
  8. cyzd[line[:4]]=line[n:]
  9. return cyzd
  10. #代码结束
  11. f1.close()
  12. def jqcx(i):
  13. #代码开始
  14. if i in cyzd.keys():
  15. print(cyzd[i])
  16. else:
  17. print('没有此成语')
  18. #代码结束
  19. cyzd={}
  20. cyjl()
  21. c=input("1精确查询0退出")
  22. while c!="0":
  23. #代码开始
  24. if c=='1':
  25. x=input('请输入成语')
  26. jqcx(x)
  27. c=input("1精确查询0退出")
  28. #代码结束

学习用find吧,不是所有成语都是四个字的

第6关:成语字典模糊查询

  1. def cyjl():
  2. f1=open("sy10//成语.txt","r",encoding="utf8")
  3. for line in f1:
  4. cy=line[:line.find("拼音")].strip()
  5. cyjx=line[line.find("拼音"):].strip()
  6. cyzd[cy]=cyjx
  7. f1.close()
  8. def mhcx(x):
  9. #代码开始
  10. for i in cyzd:
  11. if x in i:
  12. print(i)
  13. #代码结束
  14. def jqcx(x):
  15. if x not in cyzd.keys():
  16. print("成语不存在")
  17. else:
  18. print(cyzd[x])
  19. cyzd={}
  20. cyjl()
  21. c=input("1精确查询2模糊查询0退出")
  22. while c!="0":
  23. #代码开始
  24. if c=="1":
  25. x=input('请输入成语')
  26. jqcx(x)
  27. else:
  28. x=input('请输入词语')
  29. mhcx(x)
  30. c=input('1精确查询2模糊查询0退出')
  31. #代码结束

第7关:成语接龙小游戏

  1. def cyjl():
  2. f1=open("sy10//成语.txt","r",encoding="utf8")
  3. for line in f1:
  4. cy=line[:line.find("拼音")].strip()
  5. cyjx=line[line.find("拼音"):].strip()
  6. cyzd[cy]=cyjx
  7. f1.close()
  8. def mhcx():
  9. x=input("请输入成语")
  10. for y in cyzd.keys():
  11. if x in y:
  12. print(y)
  13. def jqcx():
  14. x=input("请输入成语")
  15. if x not in cyzd.keys():
  16. print("成语不存在")
  17. else:
  18. print(cyzd[x])
  19. def yx(x):
  20. n=0
  21. if x in cyzd.keys():
  22. for i in cyzd.keys():
  23. if x[-1]==i[0]:
  24. n=1
  25. print(i)
  26. break
  27. if n==0:
  28. print("你赢了")
  29. else:
  30. x=input("请输入成语")
  31. if x[0]!=i[-1]:
  32. print("没有接龙,你输了")
  33. else:
  34. yx(x)
  35. else:
  36. print("非法成语,你输了")
  37. cyzd={}
  38. cyjl()
  39. c=input("1精确查询2模糊查询3成语接龙0退出")
  40. while c!="0":
  41. if c=="1":
  42. jqcx()
  43. elif c=="2":
  44. mhcx()
  45. elif c=="3":
  46. x=input("请输入成语")
  47. yx(x)
  48. c=input("1精确查询2模糊查询3成语接龙0退出")

实验5-1 函数基础

第1关:函数定义

  1. # -*- coding: utf-8 -*-
  2. # 第一题 请在此添加函数定义代码
  3. ########## Begin ##########
  4. def add(a,b):
  5. return a+b
  6. ########### end ###########
  7. x = eval(input())
  8. y = eval(input())
  9. print('{}+{}={}'.format(x,y,add(x,y)))
  10. # 第二题 请在此添加函数定义代码
  11. ########## Begin ##########
  12. def summ(x):
  13. return sum(range(1,n+1))
  14. ########### end ###########
  15. n = eval(input())
  16. print('1+...+{}={}'.format(n,summ(n)))
  17. # 第三题 请在此添加函数定义代码
  18. ########## Begin ##########
  19. def fac(x):
  20. if x==1:
  21. return 1
  22. else:
  23. return x*fac(x-1)
  24. ########### end ###########
  25. n = eval(input())
  26. print('{}!={}'.format(n,fac(n)))

第2关:函数调用——判断素数

  1. # coding=utf-8
  2. m = eval(input()) #输入判定范围
  3. # 请在此添加代码,定义判断素数函数
  4. ###### Begin ######
  5. def isprimary(n):
  6. flag=1
  7. for i in range(2,int(n**0.5)+1):
  8. if n%i==0:
  9. flag=0
  10. break
  11. if flag==1:
  12. return True
  13. else:
  14. return False
  15. ###### End ######
  16. # 在主程序中调用该函数
  17. ###### Begin ######
  18. for i in range(2,m+1):
  19. if isprimary(i)==True:
  20. print(i)
  21. ###### End ######

第3关:函数的可选参数——计算新点坐标

  1. # -*- coding: utf-8 -*-
  2. from math import *
  3. #####定义函数,请在下面补充代码 ######
  4. def move(x,y,step,angle=0):
  5. nx=x+step*cos(radians(angle))
  6. ny=y+step*sin(radians(angle))
  7. return nx,ny
  8. ###### 函数代码补充结束 ######
  9. constr = input()
  10. if constr.count(',') == 2:
  11. x,y,step = eval(constr)
  12. #### 请在下面补充代码,调用函数move,角度取默认值,计算新点坐标
  13. x,y=move(x,y,step)
  14. #### 补充代码结束 ####
  15. print('{:.1f} {:.1f}'.format(x,y))
  16. elif constr.count(',') == 3:
  17. x,y,step,angle= eval(constr)
  18. #### 请在下面补充代码,调用函数move,带全部参数,计算新点坐标
  19. x,y=move(x,y,step,angle)
  20. #### 补充代码结束 ####
  21. print('{:.1f} {:.1f}'.format(x,y))
  22. else:
  23. print('数据输入错误')

第4关:函数的可变长度参数——计算多个数据之积

  1. #一个带*的形参名可接受任意个实参
  2. #请在此添加代码,返回参数列表中所有数的和
  3. def production(*arg):
  4. #********** Begin *********#
  5. s=1
  6. for i in arg:
  7. s=s*i
  8. return s
  9. #********** End *********#
  10. #调用
  11. #调用production()函数并输出结果
  12. print(production(2,3))
  13. print(production(2,4,5))
  14. print(production(10,2,3,4))

第5关:函数的返回值——计算三角形周长和面积

  1. import math
  2. def triangle(a, b, c):
  3. if a + b <= c or a + c <= b or b + c <= a:
  4. return 0, 0
  5. else:
  6. perimeter = a + b + c
  7. p = perimeter / 2
  8. area = math.sqrt(p * (p - a) * (p - b) * (p - c))
  9. return perimeter, area
  10. a = eval(input())
  11. b = eval(input())
  12. c = eval(input())
  13. p, area = triangle(a, b, c)
  14. if p == 0:
  15. print("不能构成三角形")
  16. else:
  17. print("周长{:.2f}".format(p))
  18. print("面积{:.3f}".format(area))

海伦公式算面积

第6关:函数的返回值——最大公约数和最小公倍数

  1. # -*- coding: utf-8 -*-
  2. # 输入两个正整数a,b
  3. a = int(input())
  4. b = int(input())
  5. # 请在此添加代码,求两个正整数的最大公约数
  6. ########## Begin ##########
  7. def gcd(a,b):
  8. if a<b:
  9. a,b=b,a
  10. y=a%b
  11. while y!=0:
  12. a=b
  13. b=y
  14. y=a%b
  15. return b
  16. def lcm(a,b):
  17. return a*b//gcd(a,b)
  18. ########## End ##########
  19. # 调用函数,并输出最大公约数
  20. g,lcm=gcd(a,b),lcm(a,b)
  21. print('最大公约数{} 最小公倍数{}'.format(g,lcm))

老演员了

第7关:变量的作用域——最长字符串

  1. # coding=utf-8
  2. # strings用来存储输入的字符串,lst1是将输入的字符串用空格分割,存储为列表
  3. strings = input()
  4. lst1 = strings.split(' ') #全局变量
  5. # 请在此添加代码,定义函数maxlen()求输入的列表中的最长的元素
  6. ########## Begin ##########
  7. def maxlen():
  8. global lst1
  9. LEN=lst1[0]
  10. for i in lst1:
  11. if len(i)>len(LEN):
  12. LEN=i
  13. return LEN
  14. ########## End ##########
  15. st = maxlen() #调用函数,得到最长字符串
  16. print(st)

第二章-Python语言基础-2.5函数(一)

第1关:内置函数的使用

  1. #coding=utf-8
  2. #输入一个整数n
  3. n = int(input())
  4. # 请在此添加代码,实现编程要求
  5. #********** Begin *********#
  6. def prime(n):
  7. if n == 1:
  8. return False
  9. for i in range(2,int(n**0.5)+1):
  10. if n % i == 0:
  11. return False
  12. return True
  13. #********** End **********#
  14. print(prime(n))

第2关:函数的调用

  1. #coding=utf-8
  2. #输入数字字符串,并转换为数值列表
  3. a = input()
  4. num1 = eval(a)
  5. numbers = list(num1)
  6. # 请在此添加函数bubbleSort代码,实现编程要求
  7. #********** Begin *********#
  8. def bubbleSort(n):
  9. m = sorted(n)
  10. return m
  11. #********** End **********#
  12. print(bubbleSort(numbers))

第3关:函数基础训练

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Sep 3 12:48:47 2020
  4. @author: hzh
  5. """
  6. from random import *
  7. from math import *
  8. r = []
  9. for i in [10, 200,300,400,500,600,700,800,900,1000]:
  10. seed(i)
  11. r.append(randint(1, i))
  12. def print_(x):
  13. if type(x) == float:
  14. print("%.4f" % x)
  15. else:
  16. print(x)
  17. #第一题
  18. def sumInt(n):
  19. #请在下面编写代码
  20. # ********** Begin ********** #
  21. if n < 0:
  22. return None
  23. else:
  24. summmary=sum(range(1,n+1))
  25. # ********** End ********** #
  26. #请不要修改下面的代码
  27. return summmary
  28. #第二题
  29. import math
  30. def factorial(n):
  31. #请在下面编写代码
  32. # ********** Begin ********** #
  33. if n < 0:
  34. return None
  35. else:
  36. fac=math.factorial(n)
  37. # ********** End ********** #
  38. #请不要修改下面的代码
  39. return fac
  40. #第三题
  41. import math
  42. def isPrime(n):
  43. # 请在下面编写代码
  44. # ********** Begin ********** #
  45. if n==1:
  46. return False
  47. else:
  48. flat=1
  49. x=int(math.sqrt(n))+1
  50. for i in range(2,x):
  51. if n%i==0:
  52. flat=0
  53. break
  54. if flat==0:
  55. return False
  56. else:
  57. return True
  58. # ********** End ********** #
  59. # 请不要修改下面的代码
  60. return (isprime)
  61. #第四题
  62. def f(x):
  63. # 请在下面编写代码
  64. # ********** Begin ********** #
  65. if -10<=x<-8:
  66. fx=x-2
  67. elif -8<=x<-6:
  68. fx=x+3
  69. elif -6<=x<=-2:
  70. fx=x**2
  71. elif -2<x<2:
  72. fx=abs(x)
  73. elif 2<=x<=4:
  74. fx=x**3
  75. elif 4<x<=6:
  76. fx=3*x-4
  77. else:
  78. fx=4*x+1
  79. # ********** End ********** #
  80. # 请不要修改下面的代码
  81. return fx
  82. #第五题
  83. def tax(salary):
  84. #请在下面编写代码
  85. # ********** Begin ********** #
  86. if 0<=salary<=47449:
  87. salaTax=salary*0.22
  88. elif 47450<=salary<=114649:
  89. salaTax=salary*0.25
  90. elif 114650<=salary<=174699:
  91. salaTax=salary*0.28
  92. elif 174700<=salary<=311949:
  93. salaTax=salary*0.33
  94. elif salary>=311949:
  95. salaTax=salary*0.35
  96. else:
  97. return None
  98. # ********** End ********** #
  99. # 请不要修改下面的代码
  100. return salaTax
  101. if __name__ == '__main__':
  102. for num in [-10, 0, 10, 100, 1000, 10000]:
  103. summary = sumInt(num)
  104. print(summary)
  105. print('\n***********************\n')
  106. for num in [-5, 0, 10, 15, 20, 25, 30]:
  107. fac = factorial(num)
  108. print(fac)
  109. print('\n***********************\n')
  110. for num in r:
  111. isprime = isPrime(num)
  112. print(isprime)
  113. print('\n***********************\n')
  114. for x in [-9, -8, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]:
  115. fx = f(x)
  116. print(fx)
  117. print('\n***********************\n')
  118. for salary in [-1000, 0, 40000, 47450, 98000, 114650, 14980, 17470, 25670, 311950, 360000]:
  119. st = tax(salary)
  120. print_(st)

总结:

难度整体比较小,主要目的是为了让你熟悉函数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/601739
推荐阅读
相关标签
  

闽ICP备14008679号