2017-06-03 192 views
-2

我正在尝试创建密码生成器。我试过使用for循环来生成每个数字。然后我将每个数字附加到列表中。不过,我想输出是沿着线的东西:Python - 将字符添加到字符串

54324 

而不是:

[5, 4, 3, 2, 4] 

以下是我的代码:

code = '' 
    chars = 5 
    for i in range(chars): 
     digit = str(randint(0,9)) 
     digit += code 

在这种情况下会发生什么事是我的输出只是空白。我对python有点新,所以我可能会错过一些明显的东西,但是如果你能解释我做错了什么以及如何解决它,我将不胜感激。

+3

' “”。加入(图(STR,[5,4,3,2,4]) )'应该这样做 –

+1

但是你的代码没有任何用处,因为每次调用循环时都会覆盖'digit'。和'code'是空的。 –

+3

颠倒你最后的声明:'code + = digit' –

回答

1

代码的修正版本

from random import randint 
code = '' 
chars = 5 
for i in range(chars): 
    digit = str(randint(0,9)) 
    code += digit 
print(code) 

顺便说一下,你可以只使用

code = randint(0,99999) 
print(code) 

来生成密码,只是说

0

在每个循环中,您正在擦除变量数字中包含的前一个值,并且此变量代码在此处无用,因为它是空的。

你可能只是这样做:

chars = 5 
for i in range(chars): 
    digit += str(randint(0,9)) 
0

你试图打印这是个位数的随机数,你必须把它添加到其他字符串存储

from random import randint 
code = '' 
chars = 5 
for i in range(chars): 
    digit = str(randint(0,9)) 
    code = code +digit 
print(code) 

希望这有助于

0

由于您附加到code它应该像这样:

code +=digit 
+0

明白了,一定会恪守。 –

1

您的代码每次都会覆盖digit。你生成一个0到9之间的随机整数,然后把它变成一个字符串。然后你添加一个code到这个digit字符串。然后在for循环的下一次迭代中,为digit生成一个新值。所以,你不应该得到你应该得到的digit一位数的值,一个整数的字符串表示空白值 - 介于0 -

9.你的价值观应该被分配并添加到code,不digit

code = '' 
chars = 5 
for i in range(chars): 
    digit = str(randint(0, 9)) 
    code += digit 

print(code) 
1

除了在代码中明显的错误,修复它会给你一个underperformant代码:

  • 丑陋for
  • 5调用随机数发生器
  • 5个转换从int到字符串
  • 字符串拼接

如果您想要生成一个由5个数字组成的密码,因为不需要数字的唯一性(如在另一个类似的问题中,这种技术不适用),您可以生成一个数字< 100000并用输出

import random 

nb_digits = 5 

for _ in range(10): 
    print("{:0{}}".format(random.randrange(0,10**nb_digits),nb_digits)) 

例如:使用嵌套format前导零

58260 
12986 
69233 
42343 
02760 
58934 
06396 
22262 
07662 
00182