python函数连续
基础练习
练习目标
函数
01.计算车费
题目描述
小红打车,起步价8元(3公里), 每公里收费 2 元,她打车行驶了 n 公里,通过函数封装并计算车费
输入描述
输入一个公里数
输出描述
输出应付车费
示例
输入:
5
输出:
12
#定义函数体 输入一个变量 def cost(num): #判断公里数大于3的情况if num > 3:cost = 8 + 2 * (num - 3) #判断小于等于3的情况else:cost = 8 #返回一个结果return cost #输入参数 km = int(input("输入一个数字")) #使用函数 cost_end = cost(km) #打印结果 print(cost_end)
02.整数叠加
题目描述
读取一个0到1000之间的整数,并计算它各位数字之和
输入输出描述
输入一个[0,1000]之间的整数
输出该数字的各位数字之和
提示
需要使用内置函数 len() 或者 for循环
示例1
输入:
999
输出:
27
解释:
999各位数之和为9 + 9 + 9 = 27
#定义函数 def sum_of_digits(n):#判断数字范围if 0 <= n <= 1000:num = 0#将n转化为字符串一个一个打印for digit in str(n):#转化类型使数据可以用于加法运算digit = int(digit)#将数据加起来num += digitreturn numelse:return "输入的数字不在[0,1000]范围内" #填写参数 num = int(input("输入一个数字")) #调用函数 num_end = sum_of_digits(num) #打印函数结果 print(num_end)
03.时间拆分
题目描述
输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天
输入描述
输入一个分钟数
输出描述
输出两行,第一行为年数,第二行为天数
示例
输入:
1000000000
输出:
1902
214
#该函数可以将分钟转化为天数(整除) def minutes_to_days(minutes):return minutes // (24 * 60) #该函数将天数转化为年数(整除) def days_to_years(days):years = days // 365return years #该函数计算整除年后的剩余天数 def days_to_remaining_days(days):remaining_days = days % 365return remaining_days #添加参数 minutes = int(input("输入分钟数")) #计算天数 days = minutes_to_days(minutes) #计算年数 years = days_to_years(days) #除去年数后剩余天数 remaining_days = days_to_remaining_days(days) print(f"年数: {years}") print(f"剩余天数: {remaining_days}")
04.回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
示例
2 3 5 7 11 101 131 151 181 191
#用于函数用于判断素数 def sushu(num):if num <= 1:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn True #用于判断回数 def huiwe(num):str_num = str(abs(num))return str_num == str_num[::-1] #添加一个数组 nums = [] #初定义数据 num = 2 #计算数组长度 数组大于100自动停止入循环 while len(nums) <100:if sushu(num):if huiwe(num):#将num加入nums数组nums.append(num)num += 1 #该数组用于计数 nums_end = [] for i in nums:print(i,end=" ")nums_end.append(i)#nums_end内部数据大于10就换行if len(nums_end) % 10 == 0:print("")
05.反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
#用于函数用于判断素数 def sushu(num):if num <= 1:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn True #用于函数用于判断回文数 def huiwe(num):str_num = str(abs(num))return str_num == str_num[::-1] #添加一个数组 nums = [] #初定义数据 num = 2 #为数组添加数据 while len(nums) <100:if sushu(num) and huiwe(num):nums.append(num)num += 1 #满足打印条件 nums_end = [] for i in nums:print(i,end=" ")nums_end.append(i)if len(nums_end) % 10 == 0:print("")
06.双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
#用于函数用于判断素数 def sushu(num):if num <= 1:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn True num = 2 while num < 1000: #判断条件if sushu(num) and sushu(num+2):print(num,num+2)num += 1
07.梅森素数
如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
#用于函数用于判断素数 def sushu(num):if num <= 1:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn True p = [] num = 2 #条件为数字小于31 while num <= 31:if sushu(num):#将遍历的数据加入数组pp.append(num)num += 1 mei_suhui = [] for i in p:nums = 2 * i * i -1#进行判定 成功就加入数组if sushu(nums):mei_suhui.append(i) print(mei_suhui)
08.堆叠相加
题目描述
现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$
例如:$2+22+222+2222+22222$,其中a为2,且有5组数字
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
示例
输入:
3 4
输出:
3702
解释:
3 + 33 + 333 + 3333 = 3702
#输入两个数据 def all_sum(n1,n2): #对num进行数据初始化num = n1sums = 0nums = []#n2为组数while len(nums) != n2:#sums为相加的最终数据sums += num#加入数组判定循环条件nums.append(num)#每一次变化numnum = num * 10 + n1return sums #输入数据 a = int(input("数字=")) n = int(input("组数=")) #打印数据 print(all_sum(a,n))
09.检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
示例1
输入:
123456ab
输出:
No
示例2
输入:
123abcABC
输出:
Yes
#判断数据长度 def ture_len(n1):if len(n1) >= 8:return Trueelse:return False #判断字母是否符合标准 def ture_include(n1):for i in n1:#将数据转换为ascll的数字if 65 <= ord(i) <= 90 or 97 <= ord(i) <= 122 or 48 <= ord(i) <= 57:return Trueelse:return False #判断设否满足数字条件 def ture_math(n1):num = []for i in n1:#将数据转换为ascll的数字if 48 <= ord(i) <= 57:num.append(i)if len(num) < 2:return Falseelse:return True #判断设否满足英文字母条件 def ture_english(n1):num = []for i in n1:#将数据转换为ascll的数字if 65 <= ord(i) <= 90:num.append(i)#判断字符长度if len(num) < 2:return Falseelse:return True password = input("输入密码:") #判断是否满足条件 if ture_len(password):if ture_include(password):if ture_math(password):if ture_english(password):print("yes")else:print("no")else:print("no")else:print("no") else:print("no")
10.指定等级
题目描述
读入学生成绩,获取最高分best,然后根据下面的规则赋等级值:
(1)如果分数≥best-10,等级为A
(2)如果分数≥best-20,等级为B
(3)如果分数≥best-30,等级为C
(4)如果分数≥best-40,等级为D
(5)其他情况,等级为F
输入输出描述
输入两行,第一行输入学生人数n,第二行输入n个学生的成绩
输入n行,表示每个学生的成绩等级
示例
输入:
4
40 55 70 58
输出:
学生0分数为40,等级为C
学生1分数为55,等级为B
学生2分数为70,等级为A
学生3分数为58,等级为B
n = input("输入学生人数:") grade = [] #map函数让输入函数变成int .split以空格分开 可以多次输入 grade = list(map(int , input("输入成绩:").split(" "))) o = 0 #对内部数据进行遍历 对结果进行判断 for i in grade:a = max(grade)if i <= max(grade) - 40:print(f"学生{o}分数为{i},等级为D")elif max(grade) - 30 <= i <= max(grade) - 20:print(f"学生{o}分数为{i},等级为C")elif max(grade) - 20 <= i <= max(grade) - 10:print(f"学生{o}分数为{i},等级为B")elif max(grade) - 10 <= i <= max(grade):print(f"学生{o}分数为{i},等级为A")o += 1
拓展作业
w01. 斐波那契数列
题目描述
斐波那契数列是一种特殊的数列,很多生活和企业场景中都能见到满足该数列的数据排列方式;现在要求你封装一个用于获取斐波那契数列数据的功能函数,用于底层数据支持;
输入描述
输入一个整数n
输出描述
输出位置为n的斐波那契数列对应的数据
示例
输入:1
输出:1
输入:3
输出:2
输入:8
输出:21
def fibonacci_iterative(n): # 初始化前两个斐波那契数 a, b = 0, 1
def fibonacci_iterative(n):# 初始化前两个斐波那契数a, b = 0, 1# 迭代n次,每次迭代计算下一个斐波那契数for _ in range(n):# 更新a和b的值,a变为下一个数,b变为当前数和下一个数的和a, b = b, a + b# 返回第n个斐波那契数return a # 调用函数计算斐波那契数列的第5个数,并打印结果 print(fibonacci_iterative(5))
w02. 密码等级校验
题目描述
按照用户输入密码的字符,判断用户的密码强度,基本要求如下
-
弱:都是数字,或者都是大写字母/小写字母组成的密码
-
中等:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母] 或者 [大小写字母、数字]组成的密码
-
强:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母]并结合特殊符号组成的密码
输入描述
用户输入一个字符串密码
输出描述
输出密码强度等级
示例
输入:abcdef
输出:弱密码
输入:abc123
输出:中等强度
输入:Abc123%
输出:强密码
def password_cent(n1):# 初始化标志变量,用于检查密码是否包含数字和字母has_digit = Falsehas_alpha = False # 遍历密码中的每个字符for i in n1:# 检查字符是否为数字(0-9)if 48 <= ord(i) <= 57:has_digit = True# 检查字符是否为字母(A-Z 或 a-z)if (65 <= ord(i) <= 90) or (97 <= ord(i) <= 122):has_alpha = True # 如果密码同时包含数字和字母,则返回True,否则返回Falsereturn has_digit and has_alpha def password_max(n1):# 初始化标志变量,用于检查密码是否包含数字、大写字母、小写字母和特殊字符has_digit = Falsehas_upper = Falsehas_lower = Falsehas_special = False # 遍历密码中的每个字符for i in n1:# 检查字符是否为数字(0-9)if 48 <= ord(i) <= 57:has_digit = True# 检查字符是否为大写字母(A-Z)if 65 <= ord(i) <= 90:has_upper = True# 检查字符是否为小写字母(a-z)if 97 <= ord(i) <= 122:has_lower = True# 检查字符是否为特殊字符(包括空格和标点符号)if (32 <= ord(i) <= 47) or (58 <= ord(i) <= 64) or (91 <= ord(i) <= 96) or (123 <= ord(i) <= 126):has_special = True # 如果密码同时包含数字、大写字母、小写字母和特殊字符,则返回True,否则返回Falsereturn has_digit and has_upper and has_lower and has_special # 测试密码列表 test_passwords = ["password", "Password1", "Password@1", "123456", "ABCDEF"] results = [] # 遍历测试密码列表 for pwd in test_passwords:# 检查密码是否为高强度密码if password_max(pwd):results.append("这是高强度密码")# 如果不是高强度密码,检查是否为中等强度密码elif password_cent(pwd):results.append("这是中等强度密码")# 如果既不是高强度密码也不是中等强度密码,则认为是弱密码else:results.append("这是弱密码") # 打印测试结果 print(results)
w03. 密码加密
题目描述
编写一个函数,实现密码的错位加密
编写一个函数,实现密码的错位解密
输入描述
输入一个字符串明文密码;
输入一个字符串密文数据;
输出描述
打印展示加密后的字符串密文
打印展示解密后的明文字符串
示例
输入:
abc # 明文
def # 密文
输出:
cde # 错位密文(具体错位可以自定义)
cde # 解密明文(具体错位可以自定义)
代码实现
-
下面代码已经实现了基本功能,但是存在BUG(请找出并修正它)
def encrypt(password, n=4):"""加密函数"""ep = ""for i in str(password):ac = ord(i)ac += n_ac = chr(ac)ep += _acreturn ep def decrypt(password, n=4):"""解密函数"""pwd = ""for i in str(password):ac = ord(i)ac -= n_ac = chr(ac)pwd += _acreturn pwd pd = input("请输入明文数据:") print("加密后的数据:", encrypt(pd, 5)) pd2 = input("请输入密文数据:") print("解密后的数据:", decrypt(pd2, 5))