函数和代码复用-课堂练习
1、来自计算机的问候-无参无返回值函数
类型:函数
描述
定义一个无参数、无返回值的函数print_hi_human(),调用函数时可以让计算机向世界发出问候,在函数中输出“人类,你好!”。
无返回值函数一般在函数内部会有输出语句或绘图语句,函数的返回值是None,在调用函数时不需要使用赋值语句或是print()函数。
示例
输出:人类,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def print_hi_human(): # 函数名用小写字母"""文档注释,双引号,说明函数的参数、功能和返回值等。定义一个名为print_hi_human的无参数函数,其功能是打印一句问候语,这个函数没有return语句,即没有返回值,或者说其返回值为None"""print("人类,你好!") # 补充你的代码# 直接使用函数名来调用函数print_hi_human() # 补充你的代码
2、来自计算机的问候-有参有返回值函数
类型:函数
描述
定义一个函数say_hi_person(),有一个参数full_name,接受人名的字符串为参数,函数的返回值为“***,你好!”,例如函数的参数为“李白”,返回值为“李白,你好!”。
示例
输入:李白
输出:李白,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def say_hi_person(full_name): # 函数名用小写字母,函数名填空"""定义一个名为say_hi_person的有参数函数,接受人名的字符串为参数,函数的返回值为“***,你好!”,例如函数的参数为“李白”,返回值为“李白,你好!”。"""return full_name + ",你好!" # 补充你的代码# 函数名作为print()函数的参数,输出say_hi_human()的返回值。输入的人名作为函数的参数person_name = input() # 输入人名print(say_hi_person(person_name)) # 补充你的代码
3、来自计算机的问候-参数的默认值
类型:函数
描述
定义一个函数say_hi_default(),有2个参数full_name和gender,接受人名和性别(“男”或“女”)的字符串为参数,函数的返回值为“尊敬的***先生/女士,欢迎来到火星!”。其中为gender指定默认值为“男”,有默认值的参数在函数调用时可以不为其指定实际参数。
根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”。当函数调用时未给出gender时,默认按男性处理。
返回值为替换了姓名与称谓的欢迎字符串
主程序在一行内输入人名和性别(性别可省略),以空格间隔。
示例 1
输入:李白 男
输出:尊敬的李白先生,欢迎来到火星!
示例 2
输入:李清照 女
输出:尊敬的李清照女士,欢迎来到火星!
示例 3
输入:李白 杜甫
输出:尊敬的李白先生/女士,欢迎来到火星!
示例 4
输入:李白
输出:尊敬的李白先生,欢迎来到火星!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# =======================================================# 补充你的代码def say_hi_default(person_info):# ======================================================="""定义一个名为say_hi_default的默认值函数根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”。当函数调用时未给出gender时,默认按男性处理返回值为替换了姓名与称谓的欢迎字符串例如:尊敬的李白先生,欢迎来到火星!"""# =======================================================# 补充你的代码full_name = person_info[0]if len(person_info) == 1:gender = "男"else:gender = person_info[1]if gender == "男":return f"尊敬的{full_name}先生,欢迎来到火星!"elif gender == "女":return f"尊敬的{full_name}女士,欢迎来到火星!"else:return f"尊敬的{full_name}先生/女士,欢迎来到火星!"# =======================================================# 函数名作为print()函数的参数,输出say_hi_default()的返回值person_info = input().split() # 输入人名与性别,性别可省略。如输入:李白 男 或 李白print(say_hi_default(person_info)) # 输出:尊敬的李白先生,欢迎来到火星!
4、来自计算机的问候-任意数量参数
类型:函数
描述
定义一个函数say_hi_multi_parameter,使之可接收任意数量的姓名为参数,调用函数时,可以传递多个参数。
有时候你预先不知道函数需要多少实参,此时可以给函数传递一个用“*”开头的序列类型的参数,例如:“*id”,形参名id前面的星号会让Python创建一个空元组,将收集到的所有实参值都封装到这个元组里。
输入格式
本题无输入
输出格式
分行对每个传入的参数输出“XXX,你好!”
示例 1
输出:
孟浩然,你好!
杜甫,你好!
李白,你好!
柳宗元,你好!
李商隐,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def say_hi_multi_parameter(*names): # 括号里填空"""定义一个不定参数传递函数,可接收不限数量的参数。"""for name in names: # 遍历输出,观察结果print(f'{name},你好!')say_hi_multi_parameter('孟浩然')say_hi_multi_parameter('杜甫', '李白', '柳宗元', '李商隐')
5、素数判定
类型:函数
描述
编程实现判定用户输入的一个正整数n是否为素数。
输入格式
输入一个正整数
输出格式
若该数为素数,输出“X是素数”
若该数为非素数,输出“X不是素数”
其中X为输入的整数
示例 1
输入:5
输出:5是素数
示例 2
输入:6
输出:6不是素数
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def is_prime(n):if n < 2:return False# 循环遍历2到n的平方根,查找是否有因子for i in range(2,int(n**0.5)+1):if n % i == 0: # 若存在因子,则不是素数return Falsereturn True # 若不存在因子,则是素数positive_int = int(input())if is_prime(positive_int): # 调用is_prime()函数判断是否为素数print(f'{positive_int}是素数')else:print(f'{positive_int}不是素数')
6、寻找回文素数
类型:函数
描述
如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131既是素数,其对应的字符串“131”又是回文字符串,所以131是回文素数。
输入一个正整数 n , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
输入格式
输入一个正整数
输出格式
一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
示例
输入:191
输出:2 3 5 7 11 101 131 151 181
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def is_prime(n):"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""# =======================================================# 补充你的代码if n < 2:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falseelse:return True# =======================================================def plalindrome_prime(number):"""接收一个正整数参数number,遍历从0到number之间的所有整数,若某个数是素数,且转为字符串后是回文字符串,则称其中回文素数找出并在同一行中输出小于number的所有回文素数,每个数字后一个空格,函数无返回值。"""# =======================================================# 补充你的代码for i in range(number):if str(i) == str(i)[::-1] and is_prime(i):print(i, end=' ')# =======================================================positive_int = int(input())plalindrome_prime(positive_int)
7、哥德巴赫猜想
类型:函数
描述
1742年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于2的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如:24=5+19,其中5和19都是素数。
输入一个正整数N,当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。
输入格式
输入一个正整数
输出格式
当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。
示例 1
输入:30
输出:
30=7+23
30=11+19
30=13+17
示例 2
输入:77
输出:
Data error!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹def is_prime(n):"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""# =======================================================# 补充你的代码if n < 2:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falseelse:return True# =======================================================def goldbach_conjecture(num):""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。参数为奇数或小于4时,输出'Data error!'"""# =======================================================# 补充你的代码if num % 2 == 0 and num >= 4: # 只判定偶数for i in range(num // 2 + 1): # 超过num // 2的组合为重复组合if is_prime(i) and is_prime(num - i):print(f"{num}={i}+{num - i}")else:print('Data error!')# =======================================================if __name__ == '__main__':positive_even = int(input()) # 输入一个正数goldbach_conjecture(positive_even)
8、自定义数学函数
类型:函数
描述
在数学运算之中,除了加、减、乘、除运算之外,还有其他更多的运算,比如乘方、开方、对数运算等等,要实现这些运算,可以使用Python 中的math模块中。我们知道,Python中的模块是将我们需要的功能提前定义为函数置于文件中,以模块的形式导入后就可以调用其中的函数解决用户的问题了。
请参考官方文档中math库中各函数的文档注释要求,完成程序模板中的函数定义(务必注意代码缩进)提供幂运算、最大公约数、最小公倍数、绝对值、向上取整 、向下取整、阶乘等运算函数,使自定义的函数的输入、输出和异常尽可能与math库中的函数一致,并使程序实现如下效果:
程序运行后将输出菜单,用户根据菜单的提示输入命令,调用并执行对应功能:
若输入命令为’pow’,则分两行依次输入一个数值x和一个整数n,并调用pow()函数计算并输出x的n次方。
若输入指令为’gcd’,则在一行内输入两个正整数a、b(空格间隔),并调用gcd()函数计算并输出这两个正整数的最大公约数。
若输入指令为’lcm’,则在一行内输入两个正整数a、b(空格间隔),并调用lcm()函数计算并输出这两个正整数的最小公倍数。
若输入指令为’fabs’,则输入一个数值x,并调用fabs()函数计算并输出这个数的绝对值。
若输入指令为’ceil’,则输入一个数值x,并调用ceil()函数计算并输出不小于该数的最小整数。
若输入指令为’floor’,则输入一个数值x,并调用floor()函数计算并输出不大于该数的最大整数。
若输入指令为’factorial’,则输入一个非负整数n,并调用factorial()函数计算并输出该数的阶乘。
若输入指令为’fsum’,则在一行内输入若干个数值(空格间隔),并调用fsum()函数计算并输出所有输入数值之和。
若输入指令不是上面任一个值,则直接输出’No such function!'。
输入输出示例
示例 1
输入:
pow
2
3
输出:
8.0
示例 2
输入:
gcd
16 24
输出:
8
示例 3
输入:
lcm
16 24
输出:
48
示例 4
输入:
fabs
-3
输出:
3
示例 5
输入:
ceil
3.8
输出:
4
示例 6
输入:
floor
3.3
输出:
3
示例 7
输入:
factorial
5
输出:
120
示例 8
输入:
fsum
1 2 3 4 5
输出:
15.0
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹def choose_function(no):"""接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""if no == 'pow': # 调用pow()函数,并输出其返回值x = float(input())n = int(input())print(pow(x, n))elif no == 'gcd': # 调用gcd()函数,并输出其返回值a, b = map(int, input().split())print(gcd(a, b))elif no == 'lcm': # 调用lcm()函数,并输出其返回值a, b = map(int, input().split())print(lcm(a, b))elif no == 'fabs': # 调用fabs()函数,并输出其返回值x = eval(input())print(fabs(x))elif no == 'ceil': # 调用ceil()函数,并输出其返回值x = eval(input())print(ceil(x))elif no == 'floor': # 调用floor()函数,并输出其返回值x = eval(input())print(floor(x))elif no == 'factorial': # 调用factorial()函数,并输出其返回值n = int(input())print(factorial(n))elif no == 'fsum': # 调用fsum()函数,并输出其返回值ls = list(map(eval, input().split()))print(fsum(ls))else:print('No such function!')def pow(x, n): # 幂运算函数"""接收一个数字x和一个整数n为参数,返回x的n次幂的结果的浮点数类型要求使pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0"""s = 1if n == 0:return float(1)for i in range(n):s = s * xreturn float(s)def gcd(a, b):"""接收两个正整数为参数,返回两个数的最大公约数"""num = 0for i in range(1, min(a + 1, b + 1)):if a % i == 0 and b % i == 0:num = ireturn numdef lcm(a, b):"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""num = 0for i in range(1, min(a + 1, b + 1)):if a % i == 0 and b % i == 0:num = ireturn f'{int(a * b / num)}'def fabs(x):"""返回x的绝对值"""return f'{abs(x)}'def ceil(x):"""接受一个浮点数或整数,返回大于或等于该数的最小整数"""if x > 0:if x % int(x) == 0:return xreturn int(x) + 1else:if x % int(x) == 0:return xreturn int(x)def floor(x):"""接受一个浮点数或整数,返回不大于该数的最大整数"""if x % int(x) == 0:return xelse:if x > 0:return int(x)else:return int(x) - 1def factorial(n):"""接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""x = 1for i in range(1, n + 1):x *= ireturn xdef fsum(iterable):"""接收一个元素为数值的序列为参数,以浮点数类型返回各元素之和"""return f'{float(sum(iterable))}'if __name__ == '__main__':func_name = input()choose_function(func_name)
9、斐波纳契数列 II
类型:Python 函数和代码复用
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
- 获取用户输入整数
N
,其中,N
为正整数; - 计算斐波那契数列的值。
如果将斐波那契数列表示为 fbi(N)
,对于整数 N
,值如下:
当 N = 1 / N = 2 时,fbi(1)
和 fbi(2)
的值是 1;
当 N > 2 时,fbi(N) = fbi(N-1) + fbi(N-2)
;
**示例1:**
输入:"4"
输出:"3"
**注意:**
- 输入使用
input()
,不要增加额外的提示信息; - 输出使用
print()
,不要增加额外的输出信息;
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# 请在...补充一行或多行代码def fbi(n):a, b = 1, 1for i in range(n - 1): # 循环计算斐波那契数列a, b = b, a + breturn an = eval(input()) # 输入要计算的项数print(fbi(n)) # 输出斐波那契数列的第n项值
10、汉诺塔实践
类别:Python 函数和代码复用
汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱 A、B、C
,初始时 A 上有 N
个圆盘,N
由用户输入给出,最终移动到圆柱 C
上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C
。其中,STEP
是步骤序号,宽度为 4 个字符,右对齐。
请编写代码,获得输入 N
后,输出汉诺塔移动的步骤。
**示例1:**
输入:3
输出:
[STEP 1] A->C
[STEP 2] A->B
[STEP 3] C->B
[STEP 4] A->C
[STEP 5] B->A
[STEP 6] B->C
[STEP 7] A->C
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# 请在...补充一行或多行代码steps = 0def hanoi(src, des, mid, n):global stepsif n == 1:steps = steps + 1print("[STEP{:>4}] {}->{}".format(steps, src, des))else:hanoi(src, mid, des, n - 1)steps = steps + 1print("[STEP{:>4}] {}->{}".format(steps, src, des))hanoi(mid, des, src, n - 1)N = eval(input())hanoi("A", "C", "B", N)
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!### 函数和代码复用-课堂练习
1、来自计算机的问候-无参无返回值函数
类型:函数
描述
定义一个无参数、无返回值的函数print_hi_human(),调用函数时可以让计算机向世界发出问候,在函数中输出“人类,你好!”。
无返回值函数一般在函数内部会有输出语句或绘图语句,函数的返回值是None,在调用函数时不需要使用赋值语句或是print()函数。
示例
输出:人类,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def print_hi_human(): # 函数名用小写字母"""文档注释,双引号,说明函数的参数、功能和返回值等。定义一个名为print_hi_human的无参数函数,其功能是打印一句问候语,这个函数没有return语句,即没有返回值,或者说其返回值为None"""print("人类,你好!") # 补充你的代码# 直接使用函数名来调用函数print_hi_human() # 补充你的代码
2、来自计算机的问候-有参有返回值函数
类型:函数
描述
定义一个函数say_hi_person(),有一个参数full_name,接受人名的字符串为参数,函数的返回值为“***,你好!”,例如函数的参数为“李白”,返回值为“李白,你好!”。
示例
输入:李白
输出:李白,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def say_hi_person(full_name): # 函数名用小写字母,函数名填空"""定义一个名为say_hi_person的有参数函数,接受人名的字符串为参数,函数的返回值为“***,你好!”,例如函数的参数为“李白”,返回值为“李白,你好!”。"""return full_name + ",你好!" # 补充你的代码# 函数名作为print()函数的参数,输出say_hi_human()的返回值。输入的人名作为函数的参数person_name = input() # 输入人名print(say_hi_person(person_name)) # 补充你的代码
3、来自计算机的问候-参数的默认值
类型:函数
描述
定义一个函数say_hi_default(),有2个参数full_name和gender,接受人名和性别(“男”或“女”)的字符串为参数,函数的返回值为“尊敬的***先生/女士,欢迎来到火星!”。其中为gender指定默认值为“男”,有默认值的参数在函数调用时可以不为其指定实际参数。
根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”。当函数调用时未给出gender时,默认按男性处理。
返回值为替换了姓名与称谓的欢迎字符串
主程序在一行内输入人名和性别(性别可省略),以空格间隔。
示例 1
输入:李白 男
输出:尊敬的李白先生,欢迎来到火星!
示例 2
输入:李清照 女
输出:尊敬的李清照女士,欢迎来到火星!
示例 3
输入:李白 杜甫
输出:尊敬的李白先生/女士,欢迎来到火星!
示例 4
输入:李白
输出:尊敬的李白先生,欢迎来到火星!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# =======================================================# 补充你的代码def say_hi_default(person_info):# ======================================================="""定义一个名为say_hi_default的默认值函数根据性别gender值确定称谓,男性称为“先生”,女性称为“女士”,不确定性别时称为“先生/女士”。当函数调用时未给出gender时,默认按男性处理返回值为替换了姓名与称谓的欢迎字符串例如:尊敬的李白先生,欢迎来到火星!"""# =======================================================# 补充你的代码full_name = person_info[0]if len(person_info) == 1:gender = "男"else:gender = person_info[1]if gender == "男":return f"尊敬的{full_name}先生,欢迎来到火星!"elif gender == "女":return f"尊敬的{full_name}女士,欢迎来到火星!"else:return f"尊敬的{full_name}先生/女士,欢迎来到火星!"# =======================================================# 函数名作为print()函数的参数,输出say_hi_default()的返回值person_info = input().split() # 输入人名与性别,性别可省略。如输入:李白 男 或 李白print(say_hi_default(person_info)) # 输出:尊敬的李白先生,欢迎来到火星!
4、来自计算机的问候-任意数量参数
类型:函数
描述
定义一个函数say_hi_multi_parameter,使之可接收任意数量的姓名为参数,调用函数时,可以传递多个参数。
有时候你预先不知道函数需要多少实参,此时可以给函数传递一个用“*”开头的序列类型的参数,例如:“*id”,形参名id前面的星号会让Python创建一个空元组,将收集到的所有实参值都封装到这个元组里。
输入格式
本题无输入
输出格式
分行对每个传入的参数输出“XXX,你好!”
示例 1
输出:
孟浩然,你好!
杜甫,你好!
李白,你好!
柳宗元,你好!
李商隐,你好!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def say_hi_multi_parameter(*names): # 括号里填空"""定义一个不定参数传递函数,可接收不限数量的参数。"""for name in names: # 遍历输出,观察结果print(f'{name},你好!')say_hi_multi_parameter('孟浩然')say_hi_multi_parameter('杜甫', '李白', '柳宗元', '李商隐')
5、素数判定
类型:函数
描述
编程实现判定用户输入的一个正整数n是否为素数。
输入格式
输入一个正整数
输出格式
若该数为素数,输出“X是素数”
若该数为非素数,输出“X不是素数”
其中X为输入的整数
示例 1
输入:5
输出:5是素数
示例 2
输入:6
输出:6不是素数
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def is_prime(n):if n < 2:return False# 循环遍历2到n的平方根,查找是否有因子for i in range(2,int(n**0.5)+1):if n % i == 0: # 若存在因子,则不是素数return Falsereturn True # 若不存在因子,则是素数positive_int = int(input())if is_prime(positive_int): # 调用is_prime()函数判断是否为素数print(f'{positive_int}是素数')else:print(f'{positive_int}不是素数')
6、寻找回文素数
类型:函数
描述
如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131既是素数,其对应的字符串“131”又是回文字符串,所以131是回文素数。
输入一个正整数 n , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
输入格式
输入一个正整数
输出格式
一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
示例
输入:191
输出:2 3 5 7 11 101 131 151 181
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':def is_prime(n):"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""# =======================================================# 补充你的代码if n < 2:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falseelse:return True# =======================================================def plalindrome_prime(number):"""接收一个正整数参数number,遍历从0到number之间的所有整数,若某个数是素数,且转为字符串后是回文字符串,则称其中回文素数找出并在同一行中输出小于number的所有回文素数,每个数字后一个空格,函数无返回值。"""# =======================================================# 补充你的代码for i in range(number):if str(i) == str(i)[::-1] and is_prime(i):print(i, end=' ')# =======================================================positive_int = int(input())plalindrome_prime(positive_int)
7、哥德巴赫猜想
类型:函数
描述
1742年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于2的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如:24=5+19,其中5和19都是素数。
输入一个正整数N,当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。
输入格式
输入一个正整数
输出格式
当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p 、 q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。
示例 1
输入:30
输出:
30=7+23
30=11+19
30=13+17
示例 2
输入:77
输出:
Data error!
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹def is_prime(n):"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""# =======================================================# 补充你的代码if n < 2:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falseelse:return True# =======================================================def goldbach_conjecture(num):""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。参数为奇数或小于4时,输出'Data error!'"""# =======================================================# 补充你的代码if num % 2 == 0 and num >= 4: # 只判定偶数for i in range(num // 2 + 1): # 超过num // 2的组合为重复组合if is_prime(i) and is_prime(num - i):print(f"{num}={i}+{num - i}")else:print('Data error!')# =======================================================if __name__ == '__main__':positive_even = int(input()) # 输入一个正数goldbach_conjecture(positive_even)
8、自定义数学函数
类型:函数
描述
在数学运算之中,除了加、减、乘、除运算之外,还有其他更多的运算,比如乘方、开方、对数运算等等,要实现这些运算,可以使用Python 中的math模块中。我们知道,Python中的模块是将我们需要的功能提前定义为函数置于文件中,以模块的形式导入后就可以调用其中的函数解决用户的问题了。
请参考官方文档中math库中各函数的文档注释要求,完成程序模板中的函数定义(务必注意代码缩进)提供幂运算、最大公约数、最小公倍数、绝对值、向上取整 、向下取整、阶乘等运算函数,使自定义的函数的输入、输出和异常尽可能与math库中的函数一致,并使程序实现如下效果:
程序运行后将输出菜单,用户根据菜单的提示输入命令,调用并执行对应功能:
若输入命令为’pow’,则分两行依次输入一个数值x和一个整数n,并调用pow()函数计算并输出x的n次方。
若输入指令为’gcd’,则在一行内输入两个正整数a、b(空格间隔),并调用gcd()函数计算并输出这两个正整数的最大公约数。
若输入指令为’lcm’,则在一行内输入两个正整数a、b(空格间隔),并调用lcm()函数计算并输出这两个正整数的最小公倍数。
若输入指令为’fabs’,则输入一个数值x,并调用fabs()函数计算并输出这个数的绝对值。
若输入指令为’ceil’,则输入一个数值x,并调用ceil()函数计算并输出不小于该数的最小整数。
若输入指令为’floor’,则输入一个数值x,并调用floor()函数计算并输出不大于该数的最大整数。
若输入指令为’factorial’,则输入一个非负整数n,并调用factorial()函数计算并输出该数的阶乘。
若输入指令为’fsum’,则在一行内输入若干个数值(空格间隔),并调用fsum()函数计算并输出所有输入数值之和。
若输入指令不是上面任一个值,则直接输出’No such function!'。
输入输出示例
示例 1
输入:
pow
2
3
输出:
8.0
示例 2
输入:
gcd
16 24
输出:
8
示例 3
输入:
lcm
16 24
输出:
48
示例 4
输入:
fabs
-3
输出:
3
示例 5
输入:
ceil
3.8
输出:
4
示例 6
输入:
floor
3.3
输出:
3
示例 7
输入:
factorial
5
输出:
120
示例 8
输入:
fsum
1 2 3 4 5
输出:
15.0
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹def choose_function(no):"""接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""if no == 'pow': # 调用pow()函数,并输出其返回值x = float(input())n = int(input())print(pow(x, n))elif no == 'gcd': # 调用gcd()函数,并输出其返回值a, b = map(int, input().split())print(gcd(a, b))elif no == 'lcm': # 调用lcm()函数,并输出其返回值a, b = map(int, input().split())print(lcm(a, b))elif no == 'fabs': # 调用fabs()函数,并输出其返回值x = eval(input())print(fabs(x))elif no == 'ceil': # 调用ceil()函数,并输出其返回值x = eval(input())print(ceil(x))elif no == 'floor': # 调用floor()函数,并输出其返回值x = eval(input())print(floor(x))elif no == 'factorial': # 调用factorial()函数,并输出其返回值n = int(input())print(factorial(n))elif no == 'fsum': # 调用fsum()函数,并输出其返回值ls = list(map(eval, input().split()))print(fsum(ls))else:print('No such function!')def pow(x, n): # 幂运算函数"""接收一个数字x和一个整数n为参数,返回x的n次幂的结果的浮点数类型要求使pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0"""s = 1if n == 0:return float(1)for i in range(n):s = s * xreturn float(s)def gcd(a, b):"""接收两个正整数为参数,返回两个数的最大公约数"""num = 0for i in range(1, min(a + 1, b + 1)):if a % i == 0 and b % i == 0:num = ireturn numdef lcm(a, b):"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""num = 0for i in range(1, min(a + 1, b + 1)):if a % i == 0 and b % i == 0:num = ireturn f'{int(a * b / num)}'def fabs(x):"""返回x的绝对值"""return f'{abs(x)}'def ceil(x):"""接受一个浮点数或整数,返回大于或等于该数的最小整数"""if x > 0:if x % int(x) == 0:return xreturn int(x) + 1else:if x % int(x) == 0:return xreturn int(x)def floor(x):"""接受一个浮点数或整数,返回不大于该数的最大整数"""if x % int(x) == 0:return xelse:if x > 0:return int(x)else:return int(x) - 1def factorial(n):"""接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""x = 1for i in range(1, n + 1):x *= ireturn xdef fsum(iterable):"""接收一个元素为数值的序列为参数,以浮点数类型返回各元素之和"""return f'{float(sum(iterable))}'if __name__ == '__main__':func_name = input()choose_function(func_name)
9、斐波纳契数列 II
类型:Python 函数和代码复用
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
- 获取用户输入整数
N
,其中,N
为正整数; - 计算斐波那契数列的值。
如果将斐波那契数列表示为 fbi(N)
,对于整数 N
,值如下:
当 N = 1 / N = 2 时,fbi(1)
和 fbi(2)
的值是 1;
当 N > 2 时,fbi(N) = fbi(N-1) + fbi(N-2)
;
**示例1:**
输入:"4"
输出:"3"
**注意:**
- 输入使用
input()
,不要增加额外的提示信息; - 输出使用
print()
,不要增加额外的输出信息;
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# 请在...补充一行或多行代码def fbi(n):a, b = 1, 1for i in range(n - 1): # 循环计算斐波那契数列a, b = b, a + breturn an = eval(input()) # 输入要计算的项数print(fbi(n)) # 输出斐波那契数列的第n项值
10、汉诺塔实践
类别:Python 函数和代码复用
汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱 A、B、C
,初始时 A 上有 N
个圆盘,N
由用户输入给出,最终移动到圆柱 C
上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C
。其中,STEP
是步骤序号,宽度为 4 个字符,右对齐。
请编写代码,获得输入 N
后,输出汉诺塔移动的步骤。
**示例1:**
输入:3
输出:
[STEP 1] A->C
[STEP 2] A->B
[STEP 3] C->B
[STEP 4] A->C
[STEP 5] B->A
[STEP 6] B->C
[STEP 7] A->C
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹if __name__ == '__main__':# 请在...补充一行或多行代码steps = 0def hanoi(src, des, mid, n):global stepsif n == 1:steps = steps + 1print("[STEP{:>4}] {}->{}".format(steps, src, des))else:hanoi(src, mid, des, n - 1)steps = steps + 1print("[STEP{:>4}] {}->{}".format(steps, src, des))hanoi(mid, des, src, n - 1)N = eval(input())hanoi("A", "C", "B", N)
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!