15.重复元素判定。编写一个函数,接受一个列表最为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变源列表的值。最后在主程序中测试该函数。
def fun(ls):
for n in ls:
if ls.count(n) > 1:
return True
else:
return False
def fun2(ls):
return len(set(ls)) < len(ls)
ls = eval(input('请按照列表格式输入列表元素:'))
if fun(ls) == True:
print('该列表中存在重复元素')
else:
print('该列表中不存在重复元素')
if fun2(ls) == True:
print('该列表中存在重复元素')
else:
print('该列表中不存在重复元素')
输出样例
请按照列表格式输入列表元素:11,16
该列表中不存在重复元素
该列表中不存在重复元素
16.将列表a中的数据线性转换成指定范围内的数据,并存放在列表b中。假设列表a中的元素的最大值为max_value,最小值为max_value。当指定列表b中的数据的取值范围为[low,high]时,将列表a中的元素a[i]线性转换为列表b中的元素b[i]的变换公式为
b[i]=low+(a[i]-min_value)*(high-low)/(max_value-min-value)
import random
def transfer(a, low, high):
b = []
max_value = max(a)
min_value = min(a)
for p in a:
new_value = low + (p - min_value) * (high - low) / (max_value - min_value)
new_value = round(new_value, 4)
b.append(new_value)
return b
def transfer2(a, low, high):
max_value = max(a)
min_value = min(a)
b = [round(low + (p - min_value) * (high - low) / (max_value - min_value), 4) for p in a]
return b
a = [random.randint(1, 100) for i in range(10)]
print(a)
low = int(input("low:"))
high = int(input("high:"))
b = transfer(a, low, high)
print(b)
b = transfer2(a, low, high)
print(b)
输出样例
[61, 89, 29, 42, 59, 65, 44, 84, 23, 86]
low:0
high:1
[0.5758, 1.0, 0.0909, 0.2879, 0.5455, 0.6364, 0.3182, 0.9242, 0.0, 0.9545]
17.输入一串字符作为密码,密码只能有数字与字母组成。编写一个函数judge(password),用来求出密码的强度level,并在主程序中测试该函数,根据输入,输出对应密码强度。密码强度判断准则如下(满足其中一项,密码增强一级):1,有数字;
2,有大写字母;3,有小写字母;4,位数不少于8位.
测试数据:
请输入测试密码:abc123
abc123的密码强度为2级
请输入测试密码:Abc123
Abc123的密码强度为3级
请输入测试密码:Abc12345
abc12345的密码强度为4级
def judge(password):
level = 0
n = len(password)
if n >= 8:
level += 1
for ch in password:
if '0' <= ch <= '9':
level += 1
break
for ch in password:
if 'A' <= ch <= 'Z':
level += 1
break
for ch in password:
if 'a' <= ch <= 'z':
level += 1
break
return level
while True:
s = input('请输入测试密码(直接回车为退出):')
if s == '':
break;
level = judge(s)
print(f'{s}的密码强度为{level}级')
输出样例
请输入测试密码(直接回车为退出):ABc123456
ABc123456的密码强度为4级
18.中位数是常见的统计量之一,在概率论和统计学中有广泛的应用,在偏态分布中有重要的价值。例如,想从一组数据中知道人们的平均财富,假设100人一个月没人收入100元,10人收入1000000元。如果算平均值,得到的是91000元,这是一个完没有向人们展现真实情况的奇怪值。在这种情况下,中位数会提供更有用的值和较好的描述。对于元素个数不同的列表而言,中位数的计算方式分为如下两种:
(1)若列表中的元素的个数为奇数,则中位数为排序后列表中间位置的那个数。
(2)若列表中的元素的个数为偶数,则中位数为排序后列表中间位置两个数的平均值。
请编写一个函数,该函数接受一个列表参数,返回高列表的中位数,最后在主程序中测试该函数。
import random
def median(ls):
_ls = sorted(ls)
_len = len(_ls)
if _len % 2 == 0:
return (_ls[_len // 2 - 1] + _ls[_len // 2]) / 2
else:
return _ls[_len // 2]
data = [random.randint(1, 100) for i in range(5)]
print(sorted(data))
print(median(data))
data = [random.randint(1, 100) for i in range(6)]
print(sorted(data))
print(median(data))
输出样例
[2, 22, 57, 62, 84]
57
[44, 54, 69, 80, 81, 81]
74.5
import random
import math
def fun(ls):
avg = sum(ls) / len(ls)
ls2 = [(n - avg) ** 2 for n in ls]
std = math.sqrt(sum(ls2) / (len(ls) - 1))
variance = std ** 2
return avg, std, variance
data = [random.randint(1, 100) for i in range(5)]
print(data)
print(fun(data))
data = [0, 8, 12, 20]
print(data)
print(fun(data))
data = [8, 9, 11, 12]
print(data)
print(fun(data))
输出样例
[2, 16, 15, 84, 66]
(36.6, 36.052739146977444, 1299.8)
[0, 8, 12, 20]
(10.0, 8.32666399786453, 69.33333333333333)
[8, 9, 11, 12]
(10.0, 1.8257418583505538, 3.3333333333333335)
20.定义一个函数delSame(li),参数li是一个列表;该函数返回一个新列表,新列表不包含重复元素,只保留第一次在原列表中出现的元素。如原列表为[1,2,3,4,5,2,1,4,5,3,8,8,9],经过处理后得到的列表为[1,2,3,4,5,8,9]。在主程序中定义一个列表并初始化,调用该函数,输出该函数,输出新的列表。
import random
def delSame(ls): # 此方法可以保持元素的原始顺序
t = []
for p in ls:
if p not in t:
t.append(p)
return t
def delSame2(ls):
return list(set(ls)) # 使用集合去重,但不能保持元素的原始顺序
data = [random.randint(1, 100) for i in range(12)]
print(data)
print(delSame(data))
print(delSame2(data))
data = [1, 2, 3, 4, 5, 2, 1, 4, 5, 3, 8, 8, 9]
print(data)
print(delSame(data))
print(delSame2(data))
输出结果
[69, 75, 3, 54, 3, 100, 93, 12, 25, 75, 9, 86]
[69, 75, 3, 54, 100, 93, 12, 25, 9, 86]
[3, 100, 69, 9, 75, 12, 54, 86, 25, 93]
[1, 2, 3, 4, 5, 2, 1, 4, 5, 3, 8, 8, 9]
[1, 2, 3, 4, 5, 8, 9]
[1, 2, 3, 4, 5, 8, 9]
21.某公司采用公用电话传递数据,数据(明文)是4位数,且在传递过程中是加密的,加密规则:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。如明文是“1234”,则密文是“9876”;明文是“2345”,则密文是“0987”。
(1)定义一个函数encrypt(s),参数s为4位数字字符串,该函数根据加密规则返回密文。
(2)在主程序中输入明文,调用加密函数,并输入密文。
def encrypt(s):
li = [str((int(i) + 5) % 10) for i in s]
li.reverse()
return ''.join(li)
s = input('input plaintext:')
print(f'明文:{s},密文:{encrypt(s)}')
输出样例
input plaintext:4567
明文:4567,密文:2109
22.求闭区间[low,high]中所有满足x*x的值的每一位数字互不相同的整数x。如分别输入low和high的值:2000,2100。在范围[2000,2100]内满足条件的整数及其平方数如下:
x | x*x |
---|---|
2013 | 4052169 |
2027 | 4108729 |
2069 | 4280761 |
2095 | 4389025 |
总数为:4
def isdiff(n):
li = [0] * 10
s = str(n)
flag = True
for i in s:
k = int(i)
li[k] += 1
if li[k] > 1:
flag = False
break
return flag
def isdiff2(n):
s = str(n)
m = set(s)
return len(m) == len(s)
low = int(input("low:"))
high = int(input("high:"))
print("x\tx*x")
k = 0
for n in range(low, high + 1):
if isdiff(n * n) == True:
print(f"{n}\t{n * n}")
k += 1
print("总数为:", k)
输出样例
low:2000
high:2300
x x*x
2013 4052169
2027 4108729
2069 4280761
2095 4389025
2123 4507129
2126 4519876
2175 4730625
2199 4835601
2203 4853209
2277 5184729
总数为: 10
23.对于学生的成绩,学生关注的通常是自己的成绩而教师往往关注的是全班的成绩。现在有一个字典(键为学号,值为成绩),里面存放着若干名学生的成绩,如{“9601”:95,“9602”:96,“9603:87,…”},其中”9601″表示学号,95表示学生成绩。请编写一个程序。
(1)定义一个全局字典,用来保存学生的成绩。
(2)定义一个函数,接受一个参数,该参数表示学号,函数返回字典中该学号对应的成绩。若字典不存在该学号,则函数返回-1。
(3)定义一个函数,按照成绩降序输出学生信息,例如:
9602,96
9601,95
9603,87
(4)在主程序中测这两个函数。
dicScore = {
'9601': 95,
'9602': 96,
'9603': 87,
}
def get_score(id):
return dicScore.get(id, -1)
def sort_score():
ls = sorted(dicScore.items(), key=lambda x: x[1], reverse=True)
for i in ls:
print(f'{i[0]},{i[1]}')
print(get_score('9602'))
sort_score()
输出结果
96
9602,96
9601,95
9603,87
24.一个人喜欢的颜色可以反应他的性格,颜色与性格的对应关系如图8-1所示。
颜色 | 性格描述 |
---|---|
红色 | 活泼而充满斗志的人 |
黄色 | 智慧型的理论家 |
蓝色 | 浪漫的人 |
绿色 | 谨慎而知性的人 |
紫色 | 注重美感和个性化的人 |
黑色 | 神秘而自尊的人 |
白色 | 诚实的人 |
请编写程序实现性格色彩测试,要求程序运行时首先显示7种颜色,并提示用户选择,选择好颜色输出对应的性格描述;接着询问用户是否继续测试,如果继续测试重复前面的操作,否则退出程序。请合理设计函数,并在主程序中测试该函数。
def menu(): # 显示用户颜色选择菜单
print('1:红色\n2:黄色\n3:蓝色\n4:绿色')
print('5:紫色\n6:黑色\n7:白色')
while True:
option = input("请输入您的选择(数字0-7,0代表停止测试):")
if option.isdigit():
return int(option)
else:
print('您输入的不是数字!')
def test(option): # 根据颜色选项获取测试结果
dic = { # 用字典保存颜色与性格的对应关系
1: "活泼而充满斗志的人",
2: "智慧型的理论家",
3: "浪漫的人",
4: "谨慎而知性的人",
5: "注重美感和个性化的人",
6: "神秘而自尊的人",
7: "诚实的人"
}
return dic.get(option, '颜色选择错误')
while True:
op = menu()
if op == 0: # 输入0表示测试结束
print('测试结束')
break;
result = test(op)
print(result)
print()
输出样例
1:红色
2:黄色
3:蓝色
4:绿色
5:紫色
6:黑色
7:白色
请输入您的选择(数字0-7,0代表停止测试):6
神秘而自尊的人
#25题
import random
fun = lambda n: n ** 2
data = [random.randint(1, 10) for i in range(5)]
print(data)
data2 = [fun(d) for d in data]
print(sum(data2))
输出样例
[4, 2, 8, 10, 9]
265
#26题
import math
fun = lambda n: (1 + math.log(n)) / (2 * math.pi)
a = math.e ** 3
b = [fun(k) for k in range(1, 101)]
print(a + sum(b))
输出结果
93.89195084920446
#27题
def fun(n):
if n == 1:
return 1
else:
return fun(n - 1) + 1 / n
print(fun(1))
print(fun(2))
print(fun(10))
print(fun(100))
print(fun(500))
输出结果
1
1.5
2.9289682539682538
5.187377517639621
6.79282342999052
#28题
def fun(n):
if n == 1:
return 1 / 3
else:
return fun(n - 1) + n / (2 * n + 1)
print(fun(1))
print(fun(2))
print(fun(10))
print(fun(100))
print(fun(500))
输出结果
0.3333333333333333
0.7333333333333334
4.409562711110699
48.85534134316012
248.4549709267233
#29题
def fun(n):
if n <= 2:
return n
else:
return fun(n - 1) + fun(n - 2) + fun(n - 3)
print(fun(1))
print(fun(2))
print(fun(3))
print(fun(9)) #当n为9时函数的值
输出结果
1
2
3
125
文章出处登录后可见!