Python练习(4)
一、问答题
(1)使用函数的好处是什么?
答:
1.提高代码的复用性
2.增强代码的可读性和可维护性
3.方便代码的调试和测试
4.实现代码的模块化
(2)如何定义一个函数?如何调用一个函数?
答:
#定义 def add(a, b): """计算两个数的和""" return a + b #调用 result = add(3, 5) print(result)
(3)给出术语函数头、形参、实参的定义
答:
#函数头 def function_name(parameters): #形参 def multiply(a, b):#形参a和b return a * b #实参 def multiply(a, b): return a * b result = multiply(3, 5)#实参3和5
(4)无返回值函数能不能有return语句?下面语句中的return函数是否会造成语法错误?
def xFunction(x,y):
print(x + y)
return
答:
无返回值函数可以有
return
语句 ,上面的语句里的return
不会造成语法错误。
(5)编写下面函数的函数头(并指出函数是否有返回值)
-
给定销售额和提成率,然后计算销售提成。
-
给定年份和月份,然后打印该月的日历。
-
计算平方根
-
判断一个数是不是偶数,如果是则返回true。
-
按指定次数打印一条消息。
-
给定贷款额、还款年数和年利率,然后计算月支付额
-
对于给定的小写字母,给出相应的大写字母。
#答案:
def xs_tc(xs_money, tc_rate)
def print_rl(year, month)
def pfg_num(number)
def is_oushu(num)
def print_message(n)
def zf_month_money(dk_money, hk_year, year_rate)
def print_daxie(xiaoxie)
(6)确定并改正下面程序中的错误
def function1(n,m):
function2(3.4)
def function2(n):
if n > 0:
return 1
elif n == 0:
return 0
elif n < 0:
return -1
function1(2,3)
#答案:
函数调用顺序问题:在 Python 中,函数需要先定义后调用。当前代码中 function1 在定义时调用了 function2,但 function2 的定义在 function1 之后,这会导致在执行 function1 时找不到 function2 的定义,引发 NameError。
函数 function1 参数未使用问题:function1 定义了参数 n 和 m,但函数体内并未使用这两个参数,属于逻辑上的不合理(虽然语法上没有错误,但不符合正常编程习惯)。
def function2(n):
if n > 0:
return 1
elif n == 0:
return 0
elif n < 0:
return -1
def function1(n, m):
# 这里如果需要使用n和m可以添加相关逻辑,目前先调用function2示例
result = function2(3.4)
return result
function1(2, 3)
(7)下面代码的输出是什么?
def main():
print(min(5,6))
def min(n1,n2):
smallest = n1
if n2 < smallest:
smallest = n2
main()#Call the main function
答:输出的数是5
(8)运行下面程序时会出现什么错误?
def main():
print(min(min(5,6),(51,6)))
def min(n1,n2):
smallest =n1
if n2 < smallest:
smallest =n2
main()# Call the main function
答:函数定义顺序问题:Python 中函数需先定义后调用。代码里 main 函数中调用 min 函数时,min 函数还未定义,会引发 NameError 错误,即名称未定义错误 。
min 函数调用参数错误:print(min(min(5,6),(51,6))) 中,内层 min(5, 6) 调用没问题,但外层 min 函数调用时,传入的第二个参数 (51, 6) 是元组类型,而自定义 min 函数预期接收两个数值类型参数,会引发 TypeError 错误,即类型错误。
(9)形参和实参能同名吗?
答:
可以同名
作用域不同:形参是在函数定义时的参数列表中声明的,它的作用域在函数内部。实参是在函数调用时传递给函数的具体值或变量,它的作用域在函数外部调用处。二者作用域相互独立,互不干扰。
(10)显示下面函数的结果
# 代码A
def main():
max=0
getMax(1,2,max)
print(max)
def getMax(value1,value2,max):
if value1 > value2:
max = vauel
else:
max = value2
main()
# 代码B
def main():
i=1
while i <= 6:
print(function1(i,2))
i+= 1
def functionl(i. num):
line = ""
for j in range(1,i):
line += str(num) + " "
num *= 2
return line
main()
# 代码C
def main():
# Initialize times
times= 3
print("Before the call,variable","times is", times)
#Invoke nprintin and display times
nPrint("welcome to Cs!",times)
print("After the call,variable","times is",times)
# Print the message n times
def nPrint(message,n):
while n>0:
print("n=",n)
print(message)
n -= 1
main()
# 代码D
def main():
i=0
while i <= 4:
function1(i)
i+ 1
print("i is”,i)
def function1(i):
line = " "
while i >= 1:
if i % 3 != 0:
line += str(i) + " "
i -= 1
print(line)
main()
答:
A
2
B
C
D
(11)下面代码的打印结果什么?
# 代码A
def function(x):
print(x)
x = 4.5
y = 3.4
print(y)
x=2
y=4
function(x)
print(x)
print(y)
# 代码B
def(x,y=1,z=2):
return x+y+Z
print(f(1,1,1))
print(f(y=1,x=2,z=3))
print(f(1,z=3))
答:
代码A
2
2
4
代码B
4
6
5
(12)下面的代码有什么错误?
def function():
x = 4.5
y= 3.4
print(x)
print(y)
function()
print(x)
print(y)
#答案:
#在 Python 中,变量 x 和 y 是在 function 函数内部定义的,属于局部变量 ,其作用域仅限于函数内部。当在函数外部执行 print(x) 和 print(y) 时,Python 解释器会找不到 x 和 y 这两个变量,因为它们在函数外部没有定义,会抛出 NameError 异常。
def function():
x = 4.5
y = 3.4
return x, y
x, y = function()
print(x)
print(y)
(13)下面代码能运行吗?如果能,打印结果是什么?
x= 10
if x < 0:
y = -1
else:
y = 1
print("y is", y)
答:能, y is 1
(14)显示下面代码的打印结果
def f(w=1,h=2):
print(w,h)
f()
f(w = 5)
f(h = 24)
f(4,5)
答:(1, 2) (5, 2) (1, 24) (4, 5)
(15)确定下面程序的错误并改正
def main():
nPrintln(5)
def nPrintln(message = "Welcome to Python!",n):
for i in range(n):
print(message)
main() #Call the main function
#函数定义顺序问题:在 Python 中,函数需要先定义后调用。在当前代码里,main 函数中调用 nPrintln 函数时,nPrintln 函数还未定义,会导致 NameError 错误。
#参数定义语法错误:在 nPrintln 函数定义中,默认参数 message = "Welcome to Python!" 放在了非默认参数 n 前面,这不符合 Python 函数参数定义规则,会导致语法错误 。
def main():
nPrintln(5)
def nPrintln(n, message = "Welcome to Python!"):
for i in range(n):
print(message)
main() #Call the main function
(16)如果在同一模块里定义两个同名的函数会发生什么?
答:在 Python 同一模块里定义两个同名函数,后定义的函数会覆盖先定义的函数 。
(17)阐述函数的内存运行机制,举例代码并画图说明
二、编程题
(18) 回文素数【录屏讲解】
视频链接:https://meeting.tencent.com/crm/2MkmPXw540
https://meeting.tencent.com/crm/NQ4BX7vJ34
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
count = 0
num = 2
#反转数字
def reverse(num):
ret = 0
while num != 0:
temp = num % 10
num = num // 10
ret = ret * 10 + temp
return ret
#定义回文数
def is_huiwenshu(num):
reverse_num = reverse(num)
return num == reverse_num
#定义素数
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
#打印结果
print("打印前100个回文素数如下:")
while count < 100:
if is_huiwenshu(num) and is_sushu(num):
print(f'{num:5}', end=" ")
count += 1
#每10个数字换行打印
if count % 10 == 0:
print()
num += 1
(19) 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
num = 2
count = 0
#反转数字
def reverse(num):
ret = 0
while num % 10 == 0:
temp = num % 10
num = num // 10
ret = ret * 10 + temp
return ret
#定义回文数
def is_huiwenshu(num):
reverse_num = reverse(num)
return reverse(num)
#定义反转素数
def is_reversesushu(num):
for i in range(2, reverse(num)):
if reverse(num) % i == 0:
return False
return True
#定义素数
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
#打印结果
print("前100个反素数如下:")
while count < 100:
if is_sushu(num) and not is_huiwenshu(num) and is_reversesushu(num):
print(f'{num:3}', end=" ")
count += 1
#每10行换行
if count % 10 == 0:
print()
num += 1
(20) 双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
num = 2
def is_sushu(num):
for i in range(2, num // 2 + 1):
if num % i == 0:
return False
return True
print("小于1000的双素数:")
for num in range(2, 1000):
if is_sushu(num) and is_sushu(num + 2):
print(f"({num}, {num + 2})", end=' ')
(21) 梅森素数
如果一个素数可以写成 2 p − 1 2^p-1 2p−1的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
def is_sushu(num):
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
print("梅森素数:")
for p in range(1, 32):
meisen_num = 2 ** p - 1
if is_sushu(meisen_num):
print(meisen_num, end=" ")
(22) 对三个数排序
提示用户输入三个数字,最后按照升序输出三个数字
def sort_numbers(num1, num2, num3):
def sort_numbers(num1, num2, num3):
if num1 > num2:
num1, num2 = num2, num1
if num1 > num3:
num1, num3 = num3, num1
if num2 > num3:
num2, num3 = num3, num2
return num1, num2, num3
num1, num2, num3 = map(int, input().split(" "))
a, b, c = sort_numbers(num1, num2, num3)
print(a, b, c)
(23)显示模式【录屏讲解】
视频链接:https://meeting.tencent.com/crm/Kwdv8Ov32d
编写函数显示如下模式:
1
2 1
... 3 2 1
n n-1 ... 3 2 1
def display_pattern(n):
"""
1
2 1
... 3 2 1
n n-1 ... 3 2 1
i k(n-i) j(i~1)
1 n-1 1
2 n-2 2,1
3 n-3 3,2,1
... ... ...
n-1 1 n-1,n-2,n-3,...1
n 0 n,n-1,n-2,...,1
"""
def display_pattern(n):
for i in range(1, n + 1):
for k in range(n - i):
print(" ", end = " ")
for j in range(i , 0, -1):
print(j, end = " ")
print()
n = int(input("请输入n值:"))
#输出结果
display_pattern(n)
(24)数列求和【录屏讲解】
视频链接:https://meeting.tencent.com/crm/2rxbkq4e62
编写一个函数计算下面的数列:
KaTeX parse error: Can't use function '$' in math mode at position 2: $̲m(i) = \frac{1}…
并输出测试结果:
i m(i)
1 0.500
2 1.16
...
19 16.40
20 17.35
def shulie_m(i):
s = 0
for i in range(1, i + 1):
s += i / (i + 1)
return s
i = int(input("请输入i值:"))
print(f"{shulie_m(i):.2f}")