也不是什么太大的问题,只是最后的结果和我想象的不同,现在时间晚了,脑子有些乱,需要明天早上起来再试试看咯,很好嘛,终于开始有挑战性了。
# ********************************
# 功能:统计字符出现的次数V4.1
# 说明:由用户控制随机字符串的长度,并计算每个字符出现次数
# 编写人:Frank 编写时间:2022年11月12日
# 修改人: 修改内容:
# *******************************************************************
import random,string
usernumber= int(input('请输入需要的字符长度'))
# 字符串长度分配
mother_len= usernumber//3 #定义母串
child_len= usernumber-mother_len#定义子串
print('母串长度', mother_len)
print('子串长度',child_len)
# 获取原始字符串
# 定义相关长度随机数
n1=random.randint(1,10)
n2=random.randint(1,52)
n3=random.randint(1,32)
# print(type(n1))
# 获取随机长度指定字符的内容
con1=random.choices(string.digits,k=n1)
con2=random.choices(string.ascii_letters,k=n2)
con3=random.choices(string.punctuation,k=n3)
# print(n2,n3,n1)
# 进行相关内容的合并
r1=''.join(con1)
r2=''.join(con2)
r3=''.join(con3)
# print(r1,r2,r3)
result=r1+r2+r3
ori_mother_len=len(result)
print('原始母串长度', ori_mother_len)
# 如果原始母串的长度大于规定长度,则随机进行截取
if(ori_mother_len> mother_len):
r=random.sample(result,mother_len)
r=''.join(r)
print('进行随机截取操作')
print('截取后字符串长度:', len(r))
print('截取后的母串:', r)
# 如果原始母串长度小于规定长度,则增加对应长度补齐
elif(ori_mother_len< mother_len):
# 循环构造补齐长
# 初始化空列表
print('进行补齐操作')
tmplist=[]
for iin range(0,mother_len-ori_mother_len):
tmplist.append(random.choice(result))
r=''.join(tmplist)
print('添加补齐后母串:',r)
print('补齐后字符串长度',len(r))
# 进行数据类型转换
listr=list(result) 问题出在这里
# print("数据类型",type(listr),listr)
print('初始数据:',listr)
number=len(listr)
print(number)
# 遍历循环
for iin range(0,child_len):
n= random.randint(1,number-1) #选择起始位置为1,而不是0,因为选择为零后,就等于没有添加
m= random.randint(0,number-1)
# print(i)
# 取出随机内容
tmp= listr[m]
listr.insert(n,tmp)
# print('添加位置n:',n)
# print('取出位置m:',m)
# print('添加内容',tmp)
print('添加后数据:',listr)
print(len(listr))
# strCon=''.join(listr)
# print(len(strCon),strCon)
# dicData={}
#
# for x in listr:
# # print(x)
# # r=strCon.count(x)
# # print(x,r)
# dicData[x]=listr.count(x)
# print('次数统计:',dicData)
# print(type(dicData))