问题 A: 字典更新
题目描述
现有字典:dict1 = {‘赵广辉’: ‘13299887777’, ‘Trump’: ‘814666888’, ‘Putin’:
‘522888666’, ‘吴京’: ‘13999887777’}
尝试修改一个键值对,姓名和电话在两行里输入,如果输入的键在字典中存在,则用新输入的电话号码替换原来的号码,如输入的键在字典中不存在则输出“数据不存在”。操作完成后输出字典中所有键值对。
输入
两行,第一行是一个姓名,第二行是电话号码
输出
参考示例
样例输入 复制
李广
13299885566
样例输出 复制
数据不存在
赵广辉:13299887777
Trump:814666888
Putin:522888666
吴京:13999887777
dict1 = {'赵广辉': '13299887777', '特朗普': '814666888', '普京': '522888666', '吴京': '13999887777'}
name=input()
tel=input()
if name in dict1:
dict1[name]=tel
else:
print("数据不存在")
for key in dict1: #遍历键,输出键值对
print(f"{key}:{dict1.get(key)}")
问题 B: 排序输出字典中数据
题目描述
有两个字典数据如下: dic1 = {‘Tom’:21,‘Bob’:18,‘Jack’:23,‘Ana’:20} dic2 =
{‘李雷’:21,‘韩梅梅’:18,‘小明’:23,‘小红’:20}
请将dic1按键的大小升序排序,将dic2按值的大小升序排序,输出dic1的前n个键的内容,输出dic2前n个键值对。当n大于元素个数时,按实际元素数量输出。
输入
输入一个正整数n
输出
输出指定个数的排序后的元素
样例输入 复制
2
样例输出 复制
[‘Ana’, ‘Bob’]
[(‘韩梅梅’, 18), (‘小红’, 20)]
dic1 = {'Tom':21,'Bob':18,'Jack':23,'Ana':20}
dic2 = {'李雷':21,'韩梅梅':18,'小明':23,'小红':20}
n=int(input())
#new_sys1=sorted(dic1.items(),key=lamda d:d[0],reverse=False)
new_sys1=sorted(dic1) #直接对字典排序返回升序的键数列
new_sys2=sorted(dic2.items(), key=lambda d:d[1], reverse=False)
#dic2.items()返回键值对,排序关键字为值,False默认升序
if n<=len(new_sys1):
print(new_sys1[:n])
else:
print(new_sys1)
if n<=len(new_sys2):
print(new_sys2[:n])
else:
print(new_sys2)
问题 C: 打印商品名
题目描述
读入以空格分隔的多个商品名,例如:Iphone7 MacPro 小米6 Vivo Oppo,将其按如下格式输出:
商品列表:
0 Iphone7
1 MacPro
2 小米6
3 Vivo
4 Oppo
输入
输入为一行,是用空格分隔的多个商品名。
输出
输出为多行,第一行为“商品列表:”,从第二行开始为序号(从0开始编号)和商品名,序号和商品名之间以一个制表符( ‘\t’ )分隔。
样例输入 复制
Iphone7 MacPro 小米6 Vivo Oppo
样例输出 复制
商品列表:
0 Iphone7
1 MacPro
2 小米6
3 Vivo
4 Oppo
phone=input().split(' ')
dic={}
for i in range(len(phone)):
dic[i]=phone[i]
print("商品列表:")
for i in range(len(phone)):
print(f"{i}\t{dic.get(i)}")
问题 D: 插入位置
题目描述
对一个有序的整数序列,现在要将一个整数插入进去,并保证该序列仍然有序。请输出这个数要插入的位置
第一行输入若干个整数,以空格间隔,本题保证用例中输入的数值顺序一定是从小到大,原始列表中无重复数据
第二行输入一个整数n
将整数序列放入列表ls
如果ls中已经存在n,则不插入该数,输出
'Fail’以及ls列表
若ls中可以插入n,输出插入位置,以及插入后的ls列表
样例输入 复制
1 2 3 5
4
样例输出 复制
3
[1,2,3,4,5]
l=input().split()
for i in range(len(l)):
l[i]=int(l[i])
n=int(input())
for i in range(len(l)):
if l[i]==n:
print("Fail")
print(l)
break
elif l[i]<n<l[i+1] and i<len(l)-1:
l.insert(i+1,n)
print(i+1)
print(l)
break
elif n<l[0]:
l.insert(0,n)
print("0")
print(l)
break
elif n>l[len(l)-1]:
l.append(n)
print(len(l)-1)
print(l)
break
#后面的许多print可以简化为一个出口,这个代码显臃肿
问题 E: 字符串压缩
题目描述
输入一个字符串s,s由若干个非数字的字符组成且相同的字符保证连续排列,将字符串按照下列规则进行长度压缩
将字符放前面,出现次数放后面,如果出现1次,则不需要保存次数
按照字符在s中出现的顺序输出压缩后的字符串.
输入:字符串
输出(三行):字典形式,键值对为
字符:出现次数
原字符串长度
压缩后字符串
压缩后字符串长度
abbc&&+++ {‘a’: 1, ‘b’: 2, ‘c’: 1, ‘&’: 2, ‘+’: 3} 9 ab2c&2+3
8
如果输入的s中有数字字符,直接输出‘ERROR’
样例输入 复制
abcc(((())))
样例输出 复制
{'a': 1, 'b': 1, 'c': 2, '(': 4, ')': 4}
12
abc2(4)4
8
s=input()
d={}
sLen=len(s)
flag=0
for i in range(sLen):
if '0'<=s[i]<='9':
flag=1
break;
d[s[i]]=d.get(s[i],0)+1
if flag==1:
print('ERROR')
else:
print(d)
print(sLen)
dLen=len(d)
i=0
while i<sLen:
print(f"{s[i]}",end='')
v=d.get(s[i],0)
if v!=1:
print(d.get(s[i],0),end='')
i+=v
tmp=0
while v!=0: #计算数字占位
v//=10
tmp+=1
dLen+=tmp
else:
i+=1
print("")
print(dLen)
可以优化,把要输出的新字符串存起来一起输出,长度用len函数
问题 F: 对数据进行排序
题目描述
输入10个数据,对数据进行排序,要求有从大到小,从小到大,倒序排序3种排序方式
输入
10个数据,用英文逗号隔开
输出
见样例
样例输入 复制
1,100,23,4.5,23,7,9,0,999999,10
样例输出 复制
倒序排序后为: [10, 999999, 0, 9, 7, 23, 4.5, 23, 100, 1]
按从小到大的顺序为: [0, 1, 4.5, 7, 9, 10, 23, 23, 100, 999999]
按从大到小的顺序为: [999999, 100, 23, 23, 10, 9, 7, 4.5, 1, 0]
l=input().split(',')
for i in range(len(l)):
l[i]=eval(l[i])
l=l[::-1]
print("倒序排序后为: ",end='')
print(l)
l.sort()
print("按从小到大的顺序为: ",end='')
print(l)
l.sort(reverse=True)
print("按从大到小的顺序为: ",end='')
print(l)
问题 G: 统计输入
题目描述
输入10个数据,再输入任意一个数值,统计输入的任意值出现的次数,同时完成10个数据平均值,最大值和最小值的计算
输入
输入10个数据,用英文逗号隔开
输入任意一个数值
输出
见样例
样例输入 复制
0,0,10,23,0.98,-0.4444,7,8,9,98
0
样例输出 复制
0 共出现 2 次
10个数据的平均值为 15.55356
10个数据的最大值为 98
10个数据的最小值为 -0.4444
l=input().split(',')
n=int(input())
sum=0
max=-999999999
min=99999999
cnt=0
for i in range(len(l)):
l[i]=eval(l[i])
sum+=l[i]
if l[i]>max:max=l[i]
if l[i]<min:min=l[i]
if l[i]==n:cnt+=1
sum/=len(l)
print(f"{n} 共出现 {cnt} 次")
print(f"{len(l)}个数据的平均值为 {sum}")
print(f"{len(l)}个数据的最大值为 {max}")
print(f"{len(l)}个数据的最小值为 {min}")
注意输出格式
问题 H: 完数判断
题目描述
输入一个数,判断其是否是完数(完数就是其所有真因子的和,恰好等于它本身)
输入
一个数
输出
见样例
样例输入 复制
5
样例输出 复制
5 的真约数为: [1]
不是完数
n=int(input())
s=set()
i=1
sum=0
while i<n :
if n%i==0:
s.add(i)
sum+=i
i+=1
s=list(s)
print(f"{n} 的真约数为: ",end='')
print(s)
if sum==n:print("是完数")
else:print("不是完数")
用了集合,没必要,其实用list就行,list.append追加
真约数是除了自己本身以外的因数,如8的真约数是1,2,4
问题 I: 查找键对应的值
题目描述
输入一个整数N,创建字典{1:1,2:4,3:9…,N:N*N},再从键盘输入一个整数M(M<=N),要求查找键M对应的值。
输入
整数N 整数M
输出
见样例
样例输入 复制
5
4
样例输出 复制
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
键 4 对应的值为: 16
n=int(input())
m=int(input())
d={}
for i in range(1,n+1):
d[i]=i*i
print(d)
print(f"键 {m} 对应的值为: {d.get(m,0)}")
问题 J: 随机密码生成
题目描述
编写一个函数,在26个字母(大小写)和9个数字组成的列表中随机生成10个8位密码。
输入
随机种子n
输出
见样例
样例输入 复制
5
样例输出 复制
第1个密码为:nQvWys81
第2个密码为:vp7hB1dx
第3个密码为:8PpD5KHX
第4个密码为:e3PYiGkP
第5个密码为:AuNaRL63
第6个密码为:xYKwzEIn
第7个密码为:ncIIA3AN
第8个密码为:xNK3KSUM
第9个密码为:i4roNL8s
第10个密码为:M5YTBXaK
from random import *
n=eval(input()) #会出现浮点型数据
seed(n)
for i in range(10):
uppletter=[chr(i) for i in range(65,91)]
lowletter=[chr(i) for i in range(97,123)]
digit=[chr(i) for i in range(48,57)]#经过试验这题里的九个数是0~8
#有函数可以直接生成大小写字母,这里手写了一个
#string.ascii_lowercase可返回26个小写字母字符串
#string.ascii_uppercase可返回26个大写字母字符串
l=uppletter+lowletter+digit
s=choice(l)
for j in range(7):
s+=choice(l)
print(f"第{i+1}个密码为:{s}")