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(23)
#答案:
函数调用顺序问题:在 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(56))

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(12max)
	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(11,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(45)

答:(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 2p1的形式,其中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}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值