1. 编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数 , 并编写测试代码 , 假设测试数据分别为 s1=[9,7,8,3,2,1,55,6] 、 s2=[" apple","pear" melon","kiwi"] 和 s3=" TheQuickBrownFox"。运行效果参见下图。
def f(s):
return max(s), min(s), len(s)
list1 = eval(input("请输入元组:"))
print(f"list={list1}")
xl = f(list1) # 利用返回值索引分别对应
print(f"最大值={xl[0]},最小值={xl[1]},元素个数={xl[2]}") # 根据返回值的索引分别对应
2. 设计一个函数,实现输入一个五位数的正整数(程序要对输入数据的合法性进行检查),对输入的数据加密后再返回,加密规则:每位数字都加上 7,然后用 10 取模,再将得到的结果交换顺序:第一位和第二位交换,第三位和第五位交换,第一位和第四位交换。
def jiami(x):
s = []
for i in range(6):
s.append((x % 10 + 7) % 10)
x = x // 10
s.reverse() # 排序
s[0], s[1] = s[1], s[0]
s[2], s[4] = s[4], s[2]
s[0], s[3] = s[3], s[0]
return int(''.join(map(str, s))) # 连接 无任何连接符
n = int(input("请输入一个五位数的正整数:"))
if n > 99999 or n <= 0:
n = int(input("请输入一个五位数的正整数:"))
print("加密前:", n)
print("加密后:", jiami(n))
3. 请编写一个程序,使用字典存储学生信息(自己编写至少十个学生的信息),学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。提示:使用sorted函数并指定其对应的参数key的值。
def f(a):
b = sorted(a) # sorted直接对键排序
name = []
for i in b:
name.append(a[i])
c = dict(zip(b, name))
return c
student = {1: 'l', 3: 'c', 2: 'x'} # 学号为键 姓名为值
print(f(student))
4. 首先,使用标准库 random 生成一个包含 50 个介于 1~100 的随机整数的列表,编写函数 def isPrime(n)用来测试整数 n 是否为素数;接下来使用内置函数 filter(把函数 isPrime()作用到包含若干随机整数的列表 lst 上,最后程序输出一个列表,其中只包含列表 lst 中不是素数的那些整数。
def isPrime(a):
if a == 1: # 1不是素数,不过滤
return 1
for i in range(2, int(a ** 0.5) + 1):
if a % i == 0: # 不是素数
return 1
else:
return 0
return 0 # 返回值为0的是素数,为过滤范围内的
import random
list1 = [random.randint(1, 101) for i in range(50)]
print(list1)
print(list(filter(isPrime, list1))) # 过滤函数返回值为0的,即过滤素数
5. 编写程序,清分别使用递归和非递归方式实现。定义一个求阶乘的函数 fact(n),并编写测试代码,要求输入整数(n≥0)。运行效果如下图所示。
####递归
def fact(n):
if n == 0 or n == 1:
return 1
else:
return n * fact(n - 1)
a = int(input("请输入整数n(n>=0):"))
print("S!=", fact(a))
####非递归
def fact(n):
num = 1
for i in range(1, n + 1):
num = num * i
return num
a = int(input("请输入整数n(n>=0):"))
print("S!=", fact(a))
6. 编写程序实现斐波那契数列,斐波那契数列:1、1、2、3、5、8、 13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。
def f(n):
for i in range (1,n+1):
if n==1 or n==2:
return 1
else:
return f(n-1) + f(n-2)
n=int(input('请输入n的值:'))
for i in range(1,n+1):
print(f(i),end='、')
7. 阅读并适当增加必要的代码来调试下面的代码,分析代码功能, 发现并解决代码中的错误。提示:此代码计算。
def cni(n, i):
minNI = min(i, n - i)
result = 1
for j in range(1, minNI + 1):
result = result * (n - j + 1) // j # 修改计算方式
return result
n = eval(input('请输入n的值:'))
i = eval(input('请输入i的值:'))
print(cni(n, i))
8. 小球从 100m 的高度自由落下,每次落地后反弹回原高度的一半;再落下,定义函数 cal 计算小球在第 n 次落地时,共经过多少米以及第 n 次反弹多高。定义全局变量 Sn和 Hn分别存储小球经过的路程和第 n 次的高度。主函数输入 n 的值,并调用 cal 函数计算输出 Sn和 Hn的值。
def cal(n):
global Sn # 定义全局变量Sn
global Hn # 定义全局变量Hn
Sn = 0
Hn = 100
for i in range(n):
Sn = Sn + Hn
Hn = 0.5 * Hn
return Sn, Hn
n = eval(input('请输入n的值:'))
result = cal(n)
print(f"Total of road is {result[0]} meter")
print(f"The heighth is {result[1]} meter")
9. 爬虫问题:(选做)
(1)利用以下代码段获取指定 url 链接对应网页源代码 url=“https://www.cnhnb.com/hangqing/cdlist-2001762-0-0-0-0-2/”
import requests
strs=requests.get(url).text #当前网页的源代码(字符串类型)
(2)从当前源代码中提取出“所在产地”和“价格”信息
(3)观察一下当前 5 页网页 url 链接的规律,并编写函数,实现抓取全部网页中的“所在产地”和“价格”信息,存入一个列表
10.(选做)编写程序,利用可变参数定义一个求任意个数数值的最小值的函数 min_n(a,b,c), 并编写测试代码。例如,对 于 “ print(min_n(8,2))”以及“ print(min_n(16,1,7,4,15)”的测试代码, 程序运行结果如图所示。
def min_n(*n): # *n为动态参数
n=min(*n)
print("最小值为",end="")
return n
print(min_n(8,2))
print(min_n(16,1,7,4,15))
11.(选做)设计一个程序,用递归求解汉诺塔。(选做)