函数和代码复用-课堂练习
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 False
return 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 False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
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 False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
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 = 1
if n == 0:
return float(1)
for i in range(n):
s = s * x
return float(s)
def gcd(a, b):
"""接收两个正整数为参数,返回两个数的最大公约数"""
num = 0
for i in range(1, min(a + 1, b + 1)):
if a % i == 0 and b % i == 0:
num = i
return num
def lcm(a, b):
"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""
num = 0
for i in range(1, min(a + 1, b + 1)):
if a % i == 0 and b % i == 0:
num = i
return 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 x
return int(x) + 1
else:
if x % int(x) == 0:
return x
return int(x)
def floor(x):
"""接受一个浮点数或整数,返回不大于该数的最大整数"""
if x % int(x) == 0:
return x
else:
if x > 0:
return int(x)
else:
return int(x) - 1
def factorial(n):
"""接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""
x = 1
for i in range(1, n + 1):
x *= i
return x
def 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, 1
for i in range(n - 1): # 循环计算斐波那契数列
a, b = b, a + b
return a
n = 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 = 0
def hanoi(src, des, mid, n):
global steps
if n == 1:
steps = steps + 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
else:
hanoi(src, mid, des, n - 1)
steps = steps + 1
print("[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 False
return 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 False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
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 False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
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 = 1
if n == 0:
return float(1)
for i in range(n):
s = s * x
return float(s)
def gcd(a, b):
"""接收两个正整数为参数,返回两个数的最大公约数"""
num = 0
for i in range(1, min(a + 1, b + 1)):
if a % i == 0 and b % i == 0:
num = i
return num
def lcm(a, b):
"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""
num = 0
for i in range(1, min(a + 1, b + 1)):
if a % i == 0 and b % i == 0:
num = i
return 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 x
return int(x) + 1
else:
if x % int(x) == 0:
return x
return int(x)
def floor(x):
"""接受一个浮点数或整数,返回不大于该数的最大整数"""
if x % int(x) == 0:
return x
else:
if x > 0:
return int(x)
else:
return int(x) - 1
def factorial(n):
"""接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""
x = 1
for i in range(1, n + 1):
x *= i
return x
def 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, 1
for i in range(n - 1): # 循环计算斐波那契数列
a, b = b, a + b
return a
n = 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 = 0
def hanoi(src, des, mid, n):
global steps
if n == 1:
steps = steps + 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
else:
hanoi(src, mid, des, n - 1)
steps = steps + 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
hanoi(mid, des, src, n - 1)
N = eval(input())
hanoi("A", "C", "B", N)
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!