当前位置: 首页 > news >正文

Python 函数知识梳理与经典编程题解析

一、问答题

(1)使用函数的好处是什么?

①提高代码的可复用性,避免重复编写相同功能代码;②使代码结构更清晰,将复杂功能拆分成多个函数,便于理解和维护;③实现模块化编程,不同函数负责不同功能,增强代码的逻辑性和可读性。

(2)如何定义一个函数?如何调用一个函数?

  • 定义函数:在 Python 中,使用def关键字,语法格式为def 函数名(参数列表): 函数体。例如def add(a, b): return a + b
  • 调用函数:直接写函数名并在括号内传入对应参数,如result = add(3, 5) ,这里add(3, 5)就是调用函数。

(3)给出术语函数头、形参、实参的定义

  • 函数头:函数定义中以def开头,包括函数名和参数列表的部分,用于标识函数名称、参数情况,如def func_name(arg1, arg2):def func_name(arg1, arg2) 是函数头。
  • 形参:函数定义时参数列表中的参数,是形式上的占位符,在函数未被调用时没有实际值,如def add(a, b):ab是形参。
  • 实参:函数调用时传递给函数的实际参数,是具有具体值的参数,如add(3, 5)35是实参。

(4)无返回值函数能不能有return语句?下面语句中的return函数是否会造成语法错误?

def	xFunction(x,y):
	print(x + y)
	return
  • 无返回值函数可以有return语句,在无返回值函数(返回值类型为None )中,return语句可用于提前结束函数执行。在题目中,return语句不会造成语法错误,它只是提前结束函数执行,此函数默认返回None

(5)编写下面函数的函数头(并指出函数是否有返回值)

  • 给定销售额和提成率,然后计算销售提成。

    def sales_commission(sales, rate):  # 函数头
        # 有返回值,返回计算出的销售提成
    
  • 给定年份和月份,然后打印该月的日历。

    def print_calendar(year, month):  # 函数头
        # 无返回值,主要用于打印日历
    
  • 计算平方根

    def square_root(number):  # 函数头
        # 有返回值,返回计算出的平方根
    
  • 判断一个数是不是偶数,如果是则返回true。

    def is_even(number):  # 函数头
        # 有返回值,返回布尔值表示是否为偶数
    
  • 按指定次数打印一条消息。

    def print_messages(number): #函数头
    	#无返回值,只要用于打印消息
    
  • 给定贷款额、还款年数和年利率,然后计算月支付额

    def pay_total(amount, year, rate): #函数头
    	#有返回值,返回计算的月支付额
    
  • 对于给定的小写字母,给出相应的大写字母。

    def daxie_letter(small_letter): #函数头
    	#有返回值,返回相应的大写字母
    

    (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)

函数调用的顺序有问题,在 function1 里调用function2之前应该对function2进行定义。

(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

代码中 min(5, 6) 会正确返回 5,但接下来 min(5, (51, 6)) 会出现问题。因为内置 min 函数期望比较的是可比较的元素,而 (51, 6) 是一个元组,它不能直接和整数 5 进行大小比较,会引发 TypeError 异常。

(9)形参和实参能同名吗?

可以

形参是函数定义时括号里声明的参数,用于接收调用函数时传入的值;实参是在函数调用时实际传递给函数的参数。形参和实参同名不会产生语法错误。

(10)显示下面函数的结果

# 代码A
def main():
	max=0
	getMax(12max)
	print(max)
	
def getMax(value1,valaue2,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):a
	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:

2

2 4

2 4 8

2 4 8 16

2 4 8 16 32

代码C:

Before the call,variable times is 3
n= 3
welcome to Cs!
n= 2
welcome to Cs!
n= 1
welcome to Cs!
After the call,variable times is 3

代码D:

1

2 1

2 1

4 2 1

i is 5

(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

3.4

2

4

代码B:

3

6

5

(12)下面的代码有什么错误?

def function():
	x = 4.5
	y= 3.4
	print(x)
	print(y)
	
function()
print(x)
print(y)

没有对全局变量x``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

函数定义顺序有误,有默认值的参数必须放在无默认值参数之后

def nPrintln(message = "Welcome to Python!",n):
	for i in range(n):
		print(message)
        
def main():
	nPrintln(5)
main() #Call the main function

(16)如果在同一模块里定义两个同名的函数会发生什么?

后面定义的函数会覆盖前面定义的函数

(17)阐述函数的内存运行机制,举例代码并画图说明

def add(a, b):
    result = a + b
    return result

x = 3
y = 4
sum_value = add(x, y)
image-20250324214542620

二、编程题

(18) 回文素数【录屏讲解】

视频链接:https://meeting.tencent.com/crm/NXwge6WP1e

回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数

输出显示前100个回文素数,每行显示10个

#即是素数也是回文数输出

def is_su(num):
	for i in range(10,num // 2 + 1 ):
		if num % i ==0:
			return False
		else:
			return True
def reverse
(num):
	ret = 0
	while num !=0:
		gewei = num % 10
		num //= 10
		ret =ret *10 + gewei
	return ret
def is_hui(num):
	return num == reverse(num)
num = 2
count = 0
while count < 100:
	if is_su(num) and is_hui(num):
		print(num, end=" ")
		count += 1
		if count % 10 == 0:
			print()
	num +=1

(19) 反素数

题目描述

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

def is_su(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
    
def reverse(num):
    ret = 0
    while num != 0:
        gewei = num % 10
        num // = 10
        ret = ret * 10 + gewei
    return ret
    
count = 0
num = 10
while count < 100:
    reversed_num = reverse(num)
    if is_su(num) and is_su(reversed_num) and num != reversed_num:
        print(num, end=" ")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

(20) 双素数

题目描述

双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数

输出显示小于1000的双素数

def is_su(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

for num in range(3, 999):  # 从3开始遍历到998,因为要找差值为2的素数对
    if is_su(num) and is_su(num + 2):
        print(f"({num}, {num + 2})", end=" ")

(21) 梅森素数

如果一个素数可以写成 2 p − 1 2^p-1 2p1的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

def is_su(num):
    #判断一个数是否为素数
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
p = 2
while p <= 31:
    mei_num = 2 ** p - 1
    if is_su(mei_num):
        print(mei_num, end=" ")
    p += 1

(22) 对三个数排序

提示用户输入三个数字,最后按照升序输出三个数字

def sort_numbers(num1, num2, num3):
def sort_numbers(num1, num2, num3):
	min_num = min(num1, num2, num3)
	max_num = max(num1, num2, num3)
	mid_num = num1 + num2 + num3 - min_num - max_num
	return max_num, mid_num, min_num

if __name__ == "__main__":
	num1, num2, num3 =map(int,input("请输入:").split(" "))
	result1, result2, result3 = sort_numbers(num1, num2, num3)
	print(result1, result2, result3)

(23)显示模式【录屏讲解】

视频链接:http://meeting.tencent.com/crm/KeOBrDVdea

编写函数显示如下模式:

              1
    		2 1
...       3 2 1
n n-1 ... 3 2 1
def display_pattern(n):
"""					i(n) j	k
              1		1	1	2
    		2 1		2	21	1
...       3 2 1		3	321	0
n n-1 ... 3 2 1		n	i~1	n - i
"""

def display_pattern(n):
	#打印行数
	for i in range(1, n+1):
		#打印空格
		for _ in range(n - i):
			print(" ", end = " ")
		#打印数字
		for j in range(i, 0, -1):
			print(j, end = " ")
		print()
display_pattern(8)

(24)数列求和【录屏讲解】

视频链接:https://meeting.tencent.com/crm/KPGmAdG974

编写一个函数计算下面的数列:

m ( i ) = 1 2 + 2 3 + . . . + i i + 1 m(i) = \frac{1}{2} + \frac{2}{3} + ... + \frac{i}{i + 1} m(i)=21+32+...+i+1i

并输出测试结果:

i		m(i)
1		0.500
2		1.16
...		
19		16.40
20		17.35
def shulie(i):
	m = 0
	for i in range(1, i+1):
		m += i / (i + 1)
		print(i ,f'{m:.2f}' )
shulie(20)
http://www.dtcms.com/a/109296.html

相关文章:

  • FFmpeg录制屏幕和音频
  • 单片机学习之定时器
  • 嵌入式海思Hi3861连接华为物联网平台操作方法
  • Zapier MCP:重塑跨应用自动化协作的技术实践
  • 【Linux】Orin NX + Ubuntu22.04配置国内源
  • 如何实现一个优雅的Go协程池
  • ORION:基于VLM引导动作生成的端到端框架——论文精度
  • 源码分析之Leaflet图层控制控件Control.Layers实现原理
  • 量子计算与人工智能的结合:未来科技的双重革命
  • 人工智能混合编程实践:C++ ONNX进行图像超分重建
  • 从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
  • “清凉海岛·创享一夏” 海南启动旅游线路产品创意设计大赛
  • 【C语言】strstr查找字符串函数
  • 基于milvus安装--可视化工具 attu
  • PyQt6实例_A股日数据维护工具_子窗体
  • 深入理解浏览器的事件循环
  • CentOS7 安装Redis
  • HTML应用指南:利用POST请求获取三大运营商5G基站位置信息(二)
  • OpenCV第3课 图像的绘制以及基本操作
  • C++:继承+菱形虚拟继承的一箭双雕
  • Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central
  • 2025年嵌入式大厂春招高频面试真题及解析
  • 使用Deployment运行无状态应用
  • 前缀和 一维差分和二维差分 差分差分矩阵
  • php的动态扩展模块(php的缓存模块)
  • 创建python虚拟环境
  • 记录一下零零散散的的东西-ImageNet
  • 大模型——如何在本地部署微软的OmniParser V2
  • PyTorch复现线性模型
  • 大模型 PDF解析-MinerU