import random
lst=list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
width = 10
s = "".join([random.choice(lst) for i in range(width*4+3)])+"\n"
for i in range(2):
for j in range(width):
s += random.choice(lst)+ " "*(width*2) +random.choice(lst)+ " "*(width*2) +random.choice(lst)+"\n"
s += "".join([random.choice(lst) for i in range(width*4+3)])+"\n"
print(s)
dic = {}
for v in s:
if v in lst:
dic[v] = dic.get(v,0)+1
for k,v in dic.items():
print(f'{k}:{v}')
https://ask.csdn.net/questions/7454693,https://ask.csdn.net/questions/7451087,你的同学已经有答案了,还望采纳
import random
# a 为题目1要求的各种符号组成的列表
a =[n for n in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_']
# b 为由随机数生成的田字格长度,随机数范围自行调节,但最小值为2
b = random.randint(3, 6)*2+1
# 因为是田字格,所以只有三行是全部由字符组成的行,其他行为三个字符加空格凑出的行
# 所以,根据长度 b,得出三个需要全字符的行
# 将所有行的字符由随机数取列表 a 中的字符
# 将所有行的信息存到列表 c 中
c = []
for i in range(b):
if i == 0 or i == (b-1)/2 or i == b-1:
c.append(''.join(a[random.randint(0,len(a)-1)] for n in range(b)))
else:
c.append((' '*int((b-3)/2)).join(n for n in [a[random.randint(0,len(a)-1)],a[random.randint(0,len(a)-1)],a[random.randint(0,len(a)-1)]]))
# 输出长度和田字格
print(str(b)+'\n'+'\n'.join(c)+'\n')
# 将所有输出的内容合并到一个大字符串中
d = ''.join(n for n in c)
将大字符串的字符生成一个列表,并转换成集合类型,在用集合的关键字:字母和字母切割大字符串后的列表长度-1,得到一个新的词典,即,字母及出现次数
e = {l:len(d.split(l))-1 for l in set([n for n in d])}
# 删除字典中的空格,因为空格是我们用来补充田字格内容的,不在列表 a 中
del e[' ']
# 输出字母及出现次数
print(','.join(w+':'+str(e[w]) for w in e))