Python之函数练习题

1.画出函数的组成部分并给出标注。为每个部分写出简短的定义。

函数的三个基本组成部分是:定义域、函数和值域。
定义域是函数可以接受的输入值集合。
函数是将一个集合(定义域)中的元素对应到另一个集合(值域)中的元素的规则。
输入值称为自变量,输出值称为因变量。

2.编写菜单:
(a)编写任何软件时,通常都有一个相同的任务,即显示菜单并要求用户在菜单上进行选择。手机上的菜单就是一个实例。菜单选项有信息、通讯录、游戏、设置、媒体和网络(或其他)。写一个函数displayMenu,向用户显示菜单,并允许用户做出选择(使用input)。

def displayMenu():
		print("----------------------菜单---------------------")
		print("---------------1、信息-----------------------")
		print("---------------2、通讯录--------------------")
		print("---------------3、游戏-----------------------")
		print("---------------4、设置-----------------------")
		print("---------------5、媒体和网络--------------")
		print("---------------6、其他-----------------------")
		choose=input("请你输入要操作的选项(1-6的整数):")
		return choose

(b)写一个函数获取用户的选择,调用相应的函数。(提供有意义的函数名称,不必编写其他函数的定义。)

def getChoose():
		return displayMenu()

3、编写函数将两个足球队的最后得分作为参数输入,输出哪个队获胜或者比赛终止。请引用变量名“Team1”或“Team2"。该函数不返回任何内容。

def getResult(Team1,Team2):
	if  Team1Team2:
		print("队伍1获胜")
	else:
		print("平手,比赛终止")

4、编写函数,输入英文句子(字符串),输出句子中元音的个数和辅音的总个数。该函数不返回任何内容。请注意句子可能包含特殊字符,如点、破折号等。

用isalpha()函数排除非字母字符,只有是字母字符的才做下一步判断。

def count_vowels_consonants(sentence):  
    vowels = 'aeiouAEIOU'  
    vowel_count = 0  
    consonant_count = 0  

    for char in sentence:     
        if char.isalpha():  
            if char in vowels:  
                vowel_count += 1  
            else:  
                consonant_count += 1  

    print(f"元音个数: {vowel_count}")  
    print(f"辅音个数: {consonant_count}")

5、斐波拉契数列是:1,1,2,3,5,8,13…。可以看到,第一个和第二个数字均为1。此后每个数字是前两个数字的总和。
(a)编写函数来输出Fibonacci序列的前n个数字。
(b)编写函数,显示序列中的第n个数字。

(a)
def fibonacci_sequence(n):  
    """  
    输出 Fibonacci 序列的前 n 个数字。  
    """  
    if n <= 0:  
        print("n 必须大于 0")  
        return  

    fibonacci_nums = [1, 1]  

    if n == 1:  
        print(fibonacci_nums[0])  
    elif n == 2:  
        print(", ".join(map(str, fibonacci_nums)))  
    else:  
        for i in range(2, n):  
            next_num = fibonacci_nums[-1] + fibonacci_nums[-2]  
            fibonacci_nums.append(next_num)  
        print(", ".join(map(str, fibonacci_nums)))
(b)
def nth_fibonacci(n):  
    """  
    显示 Fibonacci 序列中的第 n 个数字。  
    """  
    if n <= 0:  
        print("n 必须大于 0")  
        return  

    if n == 1 or n == 2:  
        print(1)  
    else:  
        a, b = 1, 1  
        for i in range(3, n + 1):  
            a, b = b, a + b  
        print(b)

6.假设你在互联网上在线购买东西。如果你是会员,在网站购买会得到10%的折扣。此外,因为是父亲节,还会获得额外的5%折扣。
编写函数,输入购买商品的价格和布尔变量(表示是否为会员)。使用适当的折扣,并返回该商品的最终价格。注:该商品的价格不必是整数。

def getPrice(price,is_vip):
	if is_vip:
		return price*0.9*0.95
	else:
		return price*0.95

7.闰年在公历系统中是能被4整除但不能被100整除,或者能被400整除的那些年份。例如1896年、1904年和2000年是闰年,但1900年不是。写一个数,输入为年份,输出是否为闰年。

def is_run(year):
	if (year%4==0 and year%100!=0) or year%400==0:
		print("%d是闰年。"%year)
	else:
		print("%d不是闰年。"%year)

8:这个函数实现什么功能?对于num=5,该函数返回什么?
def Func(num):
total =0
while num> 0:
total=total +num*(num-1)
num=num-1
return total

循环中循环变量一直减1,直到不大于0,跳出循环。
每次循环将当前数字和小它1的数字相乘,然后把结果加到total中
最后返回total
所以函数的功能是:计算1*2+2*3+。。。+(num-1)*n
当num=5时,1*2+2*3+3*4+4*5=40

9.这个函数实现什么功能?如果x=5,该函数返回什么?
def Func(x):
total = 0
for i in range(x):
total += i*(i-1)
return total

循环从0到x-1
功能:计算1*2+2*3+。。。+(x-1)*(x-2)
当x=5时,1*2+2*3+3*4=20

10.这个函数实现什么功能?返回值是什么?
def Func():
num=1.0
total =0
while num < 100:
total = 1/num
num+=1
return total

循环变量从初始值1.0到不小于100,也就是99。
循环时,total=1/num
返回值为1/99

11、错误检查时给出有意义的错误消息,是编程中非常重要的组成部分。以下面的场景为例:顾客每月支付信用卡账单。卡的信用额度是1000美元。最低还款额始终是20美元。假设信用卡还款额为P美元。编写函数makePayment§,参数为信用卡的总还款额($P),输出为"Success”或者“Retry”。试想实现此函数时所有可能发生的错误。例如,如果还款不足20美元,该程序应提醒用户还款少于最低还款额。

def makePayment(P):  
    # 信用额度  
    credit_limit = 1000  
    # 最低还款额  
    minimum_payment = 20  

    # 检查还款金额是否小于最低还款额  
    if P < minimum_payment:  
        return ("错误: 还款金额 %f美元少于最低还款额%f美元"  %(P,minimum_payment ))

    # 检查还款金额是否超出信用额度  
    if P > credit_limit:  
        return ("错误: 还款金额 %f美元超出信用额度 %f美元"  %(P,credit_limit ))

    # 还款成功  
    return "Success"

12.你购买了打往印度的国际电话卡,电话卡公司有一些优惠政策:
(a)如果用信用卡支付5美元或10美元,没有额外赠品。
(b)支付25美元,你会得到价值3美元的额外电话时间。
(e)支付50美元,你会得到价值8美元额外的电话时间。
(d)支付100美元,你会得到价值20美元的额外电话时间。
编写函数,输入用户希望获得的金额,返回用户得到的总价值。注:除上述情况外,不允许出现其他情况。

def jiazhi(money):
	if money==5 or money==10:
		return money
	elif money==25:
		return money+3
	elif money==50:
		return money+8
	elif money==100:
		return money+20

13.编写函数,输入为质量,返回与其相当的能量。(E=mc²)。使用米-千克-秒单位制。

def energy(m):
	return m*c*c

14.聊天:
(a)在某些聊天程序或消息应用程序中有一个限制,即可以在消息中发送的字符数。编写函数,输入为消息(字符串),检查字符数是否小于160。如果消息的长度少于160,返回该消息。如果消息的长度大于160,则只返回前160个字符组成的字符串。
(b)如果限制的是单词数而不是字符数,如何进行检查?写一个函数,只允许含20个单词的消息。

(a)
def getMessage(s):
	if len(s)<=160:
		return s
	else:
		return s[:160]
(b)
单词是以空格来分隔的,用split()
def getword(s):
	n=len(s.split(" "))
	if n<=20:
		return s
	else:
		return “ ”.join(s.split(" ")[:20])
	

15.编写函数,输出100以内6和10的所有公倍数。在一般情况下,函数有三个输入参数:要求公倍数的两个数字(x和y)和上限z。

def gong(x,y,z):
	for i in range(z):
		if i%6==0 and i%10==0:
			print(i)

16.用来确定是否创建独立函数的三项准则是什么?

重复性:如果某段代码会被多次重复使用,那么将其封装为独立函数是一个好主意。这样可以减少代码重复,提高代码的可维护性。

抽象性:如果某段代码实现了一个较为通用的功能,可以将其抽象为一个独立函数。这样可以增强代码的可复用性,使代码更加模块化和可理解。

复杂性:如果某段代码逻辑较为复杂,包含多个步骤或嵌套结构,那么将其封装为独立函数可以提高代码的可读性和可维护性。

19.编写函数,输入一个字符串,以如下格式存储为日期和时间(24小时制),“MM/DD/YYYY HR:MIN:SEC”并输出以下内容:
DD/MM/YYYY
HR: MIN:SEC
MM/YYYY
时间是“AM”或“PM"
函数中需要进行输入验证。例如,如果用户输入“122/04/199013:12:12",该字符串是无效的,因为一年只有12个月。考虑所有可能的错误输入,并编写代码进行处理。该函数不返回任何值。

def time(s):
	month,day,year=s.split()[0].split("/")
	hour,min,sec=s.split()[1].split(":")
	if  month<=0 or month>12 or day<1 or day>31 or year<1 or hour<0 or hour>25 or min<0 or min>59 or sec<0 or sec>59:
		print("输入的日期和时间格式有误,请重新输入.")  
		return
	print("%d/%d/%d"%(day,month,year))
	print("%d:%d:%d"%(hour,min,sec))
	print("%d/%d"%(month,year))
	if  hour<12:
		print("时间是AM")
	else:
		print("时间是PM")

20.编写函数,输入字符串,日期和时间存储为“MM/DD/YYYYHR:MIN:SEC”格式,输出从“01/01/YYYY 00:00:00”开始计时的秒数。

import datetime  

def get_seconds(datetime_str):  
    # 1. 将输入的字符串转换为datetime对象  
    month, day, year, hour, minute, second = map(int, datetime_str.split(" "))  
    input_datetime = datetime.datetime(year, month, day, hour, minute, second)  
    
    # 2. 计算从当年1月1日 00:00:00 开始的秒数  
    start_of_year = datetime.datetime(year, 1, 1, 0, 0, 0)  
    seconds = (input_datetime - start_of_year).total_seconds()  
    
    return int(seconds)

21.编写函数,显示A~B(含)范围中,所有位上的数字都属于集合[1,3,4,8,9]的数字。检查是否A小于或等于B,否则交换这两个数字。该函数有两个整型参数:A和B。

def show_valid_numbers(A, B):  
    # 检查A和B的大小关系  
    if A > B:  
        A, B = B, A  
        
    # 创建集合[1, 3, 4, 8, 9]  
    valid_digits = set([1, 3, 4, 8, 9])  

    # 遍历范围[A, B]内的所有数字  
    for num in range(A, B + 1):  
        # 将数字转换为字符串  
        num_str = str(num) 
        # 检查数字的每一位是否都在集合valid_digits中  
        flag=1  #标记,1符合,0不符合
        for digit in num_str:
        	if int(digit) not in valid_digits:
        		flag=0
        		break   #不符合flag=0并结束这个数字的循环
        if flag:
            print(num)  

22.给出形如"{ABC}”的字符串,代表长度为3的集合。写一个函数,输入字符串为参数,并返回以逗号分隔的各种排列形式,如“{ABC,ACB,BAC,BCA,CAB,CBA}"。提示:使用多个for循环。

def a(s):
	ss=s[1:-1]  #去掉大括号
	sss=""
	for i in range(3):
		for j in range(3):
			for k in range(3):
				if i==j or i==k or j==k:
					continue
				else:
					sss=sss+i+j+k
	sss="{"+sss
	sss.replace(sss[-1],"}")   #最后一个多了一个逗号,替换掉

你可能感兴趣的:(Python,python,开发语言)