for循环符号相加的问题
在写一个随机密码的程序时,for循环符号相加构成字符串出现了问题,尝试解决无果后,不得不换用另一个代表词。
具体的题目是:
由程序给出10个同时包含数字字母符号的10位密码。
问题有:
1.如何同时包含数字字母符号?
答:分别取值,再相加
2.如何控制字母数字符号的个数和为10?
答:利用while循环判断,否则重新取值。
3.如何控制三种字符的个数问题?
答:在分别取值的时候,利用random库,随机取数,定为该项的个数。
最开始的代码:
from random import *
seed(0x1010)
word=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','g','q','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
number=['0','1','2','3','4','5','6','7','8','9']
signal=['!','@','#','$','%','^','&','*']
#生成10个密码
for i in range (0,11):
one=randint(1,8)#决定取多少字母
start=''
key=''
for j in range (0,one):
get1=choice(word)
start=start+get1
two=randint(1,8)#决定取多少数字
while one+two>9:#判断是否超出长度限制
two=randint(1,8)
else:
for q in range (0,two):
get2=choice(number)
start=start+get2
three=10-one-two#决定取多少字符
for t in range (0,three):
start=start+choice(signal)
key_m=list(start)
shuffle(key_m)
for k in key_m:
key=key+k
print(key)
然后不知道为什么在取符号的那里出现了问题。
如果单开文件,取符号,是可以相加为字符串的。
但是在这个程序里,符号取完后不能按照和上面相同的处理方法依次加到前面的字母和数字组成的字符串里。
解决办法是:先单独相加,再和前者合并
对于符号相加组成的字符串,另外命名,然后加到前者上。
成功代码:
from random import *
seed(0x1010)
word=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','g','q','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
number=['0','1','2','3','4','5','6','7','8','9']
signal=['!','@','#','$','%','^','&','*']
#生成10个密码
for i in range (0,11):
one=randint(1,8)#决定取多少字母
start=''
key=''
sig=''
for j in range (0,one):
get1=choice(word)
start=start+get1
two=randint(1,8)#决定取多少数字
while one+two>9:#判断是否超出长度限制
two=randint(1,8)
else:
for q in range (0,two):
get2=choice(number)
start=start+get2
three=10-one-two#决定取多少字符
for t in range (0,three):
sig=sig+choice(signal)
key_w=start+sig
key_m=list(key_w)
shuffle(key_m)
for k in key_m:
key=key+k
print(key)
不知道原因,但是好歹解决了,能跑起来就行。以后再找原因吧。