python例题(字典练习)

1、【问题描述】

输入字符串,输出字符串中出现次数最多的字母及其出现次数。如果有多个字母出现次数一样,则按字符从小到大顺序输出字母及其出现次数。
【输入形式】

一个字符串。
【输出形式】

出现次数最多的字母及其出现次数

【样例输入】

abcccd
【样例输出】

c 3

代码实现:

str=input('请输入字符串:')
a=set(str)                              #set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
count={}
#遍历集合a
for i in a:
    count[i]=str.count(i)       #count()函数统计字符串str中的各个字符出现的次数。
#统计字典中最大的values
max1 = max(count.values())
# items()函数以列表返回可遍历的(键, 值)元组数组
data = list(count.items())
# 将元组以字母顺序对列表进行排序:
data.sort()
# 判断元组values是否等于最大值,满足则输出对应字母字符及出现次数
for i in data:
    if i[1] == max1:
        print(i[0], i[1])

结果:

 

 2【问题描述】

定义一个电话簿,里头设置以下联系人:

    'mayun':'13309283335',

    'zhaolong':'18989227822',

    'zhangmin':'13382398921',

    'Gorge':'19833824743',

    'Jordan':'18807317878',

    'Curry':'15093488129',

    'Wade':'19282937665'

现在输入人名,查询他的号码。
【输入形式】

人名,是一个字符串。
【输出形式】

电话号码。如果该人不存在,返回"not found"
【样例输入】

mayun
【样例输出】

13309283335

代码实现:

address_list={'mayun':'13309283335',
              'zhaolong':'18989227822',
              'zhangmin':'13382398921',
              'Gorge':'19833824743',
              'Jordan':'18807317878',
              'Curry':'15093488129',
              'Wade':'19282937665'}
while True:
    name=input('请输入名字:')
    if name in address_list.keys():
        print(address_list[name])
    else:
        print('not found')

结果:

3 【问题描述】

先输入多个英文单词及其译文,接着输入英文单词,输出该单词的译文。
【输入形式】

第一行是整数n,表示n个英文单词及其译文。

接下来输入n行是英文单词和译文,中间用空格隔开。

接下来输入的一行是一个英文单词。
【输出形式】

输出最后输入的英文单词的译文。如果没有检索到该单词,输出"not found"。
【样例输入】

3

word zi

go qu

input shuru

go

【样例输出】

qu

【样例说明】

qu是go单词的译文。

代码实现:

num = input("请输入一个整数n:")
Eng2CH = {}   #创建一个字典
for i in range(int(num)):
	str = input("输入多个英文单词及其译文:")    #输入单词
	sList = str.split(' ')  #split() 通过指定分隔符对字符串进行切片
	Eng2CH[sList[0]] = sList[-1]
word = input("请输入待查找的单词:")
if word.strip(' ') in Eng2CH:
	print(Eng2CH[word.strip(' ')])
else:
	print("not found")

结果:

 4、【问题描述】

给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
【输入形式】

第一行包含一个整数n,表示给定数字的个数; 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。

【输出形式】

输出有多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。

【样例输入】

12

5 2 3 3 1 3 4 2 5 2 3 5

【样例输出】

3 4

2 3

5 3

1 1

4 1
【样例说明】

n不超过1000,给出的数为2,000,000,000以内的非负整数。

代码实现

N = int(input())
line = list(map(int, input().split()))
d = {}
for i in range(len(line)):
    if line[i] in d:
        d[line[i]] += 1
    else:
        d[line[i]] = 1
a = sorted(d.items(), key=lambda x: (x[1], x[0]))  # d为字典, a为元组
a.sort(key=lambda x: x[1], reverse=True)
for i in range(len(a)):
    print(a[i][0], a[i][1])

结果:

 5、【问题描述】

学习了字典之后,同学们都想学以致用创建一个自己的通信录。小明是这么做的:

(1)先根据三位舍友的联系方式创建一个字典dicTXL。

(2)然后将隔壁舍长已经建好的字典dicOther合并进了自己的通信录。

(3)合并之后,小明又打算给通信录增加一列“微信号”,为此他询问了相关同学的微信号并存储在了字典dicWX中,然后合并进入自己的通信录,而没有询问到微信号的同学都默认微信号为其手机号。

请按照小明的步骤完成通信录dicTXL的创建,并测试如下功能:

(1)将“大王”的手机号更改为13914000004。

(2)输入姓名查找对应同学的手机号、QQ号和微信号,如果输入的姓名不存在,则返回“没有该同学的联系方式”。

【输入形式】

使用input()函数获取用户输入的姓名。

【输出形式】

使用print()函数输出对应的手机号、QQ号和微信号。

【样例输入】

小刚

【样例输出】

13913000003

18191220003

gang1004

代码实现:

#字典diicTXL和dicOther分别存储小明的通讯录和舍友通讯录信息,通信录中包括姓名、手机号和QQ号信息
dicTXL={'小新':['13913000001','18181220001'],
        '小亮':['13913000002','18191220002'],
        '小刚':['13913000003','18191220003']}
dicOther={'大刘':['13914000001','18191230001'],
          '大王':['13914000002','18191230002'],
          '大张':['13914000003','18191230003']}
#将字典dicOther合并到字典dicTXL中
dicTXL = dict(dicTXL, **dicOther)
print(dicTXL)


#dicWX字典存储同学的微信号
dicWX={'小新':'xx9907',
       '小刚':'gang1004',
       '大王':'jack_w',
       '大刘':'liu666'}
#将微信号添加至字典dicTXL中
for  dicTXL_k,dicTXL_v  in  dicTXL.items():
        if  dicTXL_k  in  dicWX:
            #dicTXL.update(dicWX)
            dicTXL_v.append(dicWX[dicTXL_k])
        else:
            dicTXL_v.append(dicTXL_v[0])
print(dicTXL)

结果:

 6、【问题描述】

一年一度的校园好声音进行到了激烈的决赛环节,8位评委对入围的6名选手给出了最终的评分,请根据评分表,将每位选手的得分去掉一个最高分和一个最低分后求平均分,并按照平均分由高到低的顺序输出选手编号和最后得分。

代码实现:

dic_score={ '012':[90,94,85,54,68,75,71,21],
            '005':[8,75,21,65,89,97,25,75],
            '108':[87,54,78,25,14,98,67,57],
            '037':[45,87,54,82,95,91,57,32],
            '066':[95,67,51,48,98,92,80,39],
            '020':[85,81,65,97,35,62,71,84]}
print(dic_score)
dic_avg={}    #存放平均分
for  k,v  in  dic_score.items():
    v_min= min(v)                  # 求最低分
    v_max = max(v)  # 求最高分
    v_sum = sum(v)  # 求总分
    v_sum = v_sum - v_max - v_min  # 从总分中去除最大值和最小值
    v_avg = v_sum / (len(v) - 2)  # 求平均分

    dic_avg[k]=v_avg               # 将参赛者编号和平均值存入字典dic_avg中

print(dic_avg)
#按照平均分由大到小排序
lt_avg=[(v,k)  for  k,v  in  dic_avg.items()]
lt_avg.sort(reverse=True)
print(lt_avg)
lt_avg=[(v,k)  for  k,v  in  lt_avg]
dic_avg=dict(lt_avg)
print(dic_avg)
#输出结果
for k,v in dic_avg.items():
    print(k,v)

结果:

7.字符统计
【问题描述】从键盘输入一个字符串,分别统计数字,字母(包括大小写)和其他字符的个数,输出每个字符及其个数。要求:输出用字典:{'字母': n1,'数字': n2,'其他':n3},提示:字母统计方法isalpha),数字统计方法isdigit().
【样例输入】12345*dfdg
【样例输出】{'数字":5,'其他:2,'字母:4}

方法一

str=input('请输入字符串:')
count={'数字':0,'其他':0,'字母':0}
for i in str:
    if i.isalpha():
        count['字母'] += 1
    elif i.isdigit():
        count['数字'] += 1
    else:
        count['其他'] += 1
print(count)

结果:

方法二:

def fun(string):
    result = {"数字":0, "其他":0, "字母":0}
    for ch in string:
        if ch.isalpha():
            result['字母'] += 1
        elif ch.isdigit():
            result['数字'] += 1
        else:
            result['其他'] += 1
    return result

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    string = "12345*dfdg"
    fun(string)

8.列表操作
【问题描述】编写程序将列表s=[6,17,81,3,29,12,51,16]中能被3整除的数减2,其他数保持不变,输出变换后的列表。
【输出形式】[4,17,79,1,29,10,49,16]

s=[6,17,81,3,29,12,51,16]
for i in range(len(s)):
    if s[i]%3==0:
        s[i]=s[i]-2
print(list(s))

结果:

 

  • 27
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值