思路:用列表存储大小写字母、数字和下划线,用random随机产生一个下标对应一个字符然后画出图形。
import random
a=['0','1','2','3','4','5','6','7','8','9','10','_']
b=[]
for i in range(26):
i+=65
r = chr(i)
a.append(r)
for i in range(26):
i+=97
r = chr(i)
a.append(r)
for i in range(7):
s = random.randint(0, 63)
b.append(a[s])
print(a[s],end=' ')
print()
for i in range(5):
if i!=2:
for j in range(7):
if j==0 or j ==6or j==3:
s = random.randint(0, 63)
b.append(a[s])
print(a[s], end=' ')
else:
print(" ", end=' ')
print()
else:
for i in range(7):
s = random.randint(0, 63)
b.append(a[s])
print(a[s], end=' ')
print()
for i in range(7):
s = random.randint(0, 63)
b.append(a[s])
print(a[s], end=' ')
print()
dic={}
for i in b:
dic[i]=b.count(i)
print(dic)
https://ask.csdn.net/questions/7454693,https://ask.csdn.net/questions/7451087,你的同学已经有答案了,还望采纳
# 导入随机函数包
import random
# 定义字符集
chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'
# 获取随机长度,长度与田字格公式为((l*4+3)+l*2)*3,推到为 (l*6+3)*3,即 l*18+9
# l = random.randint(1,20)
l = 10
# 根据公式计算出需要使用到的字符数量,并获取该数量的随机字符,生成一个字符串
arr = ''.join([random.choice(chars) for n in range(l*18+9)])
# 取得完整字符行所在行f,以及边长b
f,b = [0,l+1,l*2+2],l*4+3
# 按长度输出字符串组成田字格
for i in range(l*2+3):
# 如果是完整字符的行
if i in f:
# 得到是第几个完整行
t = f.index(i)
# 根据所在完整行位置,长度,边长,得到输出字符的切片并输出
print(arr[t*l*3+t*b:t*l*3+t*b+b])
else:
# 获取非完整行所在行,并计算字符串切片开始位置
t = (i-1)*3+(b if i<f[1] else b*2-3)
# 根据切片开始位置获取字符串切片,转列表后,用长度数量的空格补足,并输出
print((' '*l*2).join(list(arr[t:t+3])))
# 将大字符串的字符生成一个列表,并转换成集合类型,在用集合的关键字:字母和字母切割大字符串后的列表长度-1,得到一个新的词典,即,字母及出现次数
e = {l:len(arr.split(l))-1 for l in set([n for n in arr])}
# 输出字符统计结果
print('\n'.join(w+':'+str(e[w]) for w in e))
海浪兄画的田字格比我的方,从新调整一个出来
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))
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}')