|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是:
生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。
要求:
1、利用random模块和string模块随机生成一个长度为1000由字符(包括英文字母,数字和标点符号)组成的字符串。
2、统计组成字符串的每个字符出现的次数,并将每个字符及其出现的次数保存在字典中。
要求用两种方式统计每个字符出现的次数:1)set+count;2)get方法
3、按每个字符出现的次数从大到小排序,并分行打印输出排在前五的每个字符及其出现的次数(从大到小)。
4、找到出现次数最多和最少的字符,打印输出出现次数最多和最少的字符及出现次数。
现在已经做到:
- import random
- import string
- x = string.ascii_letters + string.digits + string.punctuation
- y = [random.choice(x) for i in range(1000)]
- z = "".join(y)
- dict1 = dict()
- dict2 = dict()
- print('随机生成的字符是',z)
- a=''.join(set(z))
- print('字符数量是',len(a))
- #第一种统计方法
- for a in z :
- dict1[a] = dict1.get(a, 0) + 1
- print(dict1)
- #第二种
- for a in z :
- dict2.setdefault(a, 0)
- dict2[a] += 1
- print(dict2)
- list1 = list(dict1.items())
- list1.sort(key=lambda x:x[1],reverse=True)
- print('从大到小是:',dict(list1))
- newdict=dict(zip(dict1.values(),dict1.keys()))
- def f(x) :
- v1=sorted(dict1.values(),reverse=True)[x]
- print(newdict.get(v1),v1)
- return
- f(0)
- f(1)
- f(2)
- f(3)
- f(4)
- print("出现次数最多的是:['",newdict.get(sorted(dict1.values(),reverse=True)[0]),"']",sorted(dict1.values(),reverse=True)[0])
- print("出现次数最少的是:['",newdict.get(sorted(dict1.values(),reverse=True)[len(list1)-1]),"']",sorted(dict1.values(),reverse=True)[len(list1)-1])
复制代码
我是用了讲字典的value和key反过来,但是这样会覆盖掉一些相同的数据
我一开始想的是已知value值输出对应的key值,但是我做不到
后面我又想了一个办法,就是能不能在f(0)这一步之后,在原来的dict1中删除掉这个key-value对
然后我又失败了,希望论坛的大神能给出合适的解决方法!
感谢感谢,我只是一个大一的学生,希望大家给的意见或者方法可以让我听懂~
你做的方法是有错误的,给你修改了。
- import random
- import string
- x = string.ascii_letters + string.digits + string.punctuation
- y = [random.choice(x) for i in range(1000)]
- ##z = "".join(y)
- dict1 = dict()
- dict2 = dict()
- print('随机生成的字符是',"".join(y))
- ##a=''.join(set(z))
- print('字符数量是',len(set(y)))
- #第一种统计方法 set + count
- for a in set(y) :
- dict1[a] = y.count(a)
- print("第一种",dict1)
- #第二种 get方法
- for a in y :
- dict2[a] = dict2.get(a, 0) + 1
- print("第二种",dict2)
- list1 = list(dict1.items())
- list1.sort(key=lambda x:x[1],reverse=True)
- print('从大到小是:',dict(list1))
- print("-"*20)
- print('前五:',dict(list1[:5]))
- maxstr = {}
- minstr = {}
- for i in dict1:
- if dict1[i] == max(dict1.values()):
- maxstr[i] = dict1[i]
- if dict1[i] == min(dict1.values()):
- minstr[i] = dict1[i]
- print("最多",maxstr)
- print("最少",minstr)
复制代码
|
|