首页 > 解决方案 > 为什么 random.choice 不会生成随机列表?

问题描述

我的目标是一个简单的密码生成器。我找不到任何对 random.choice() 未能随机选择列表元素的引用,所以它一定是我的代码结构有问题。

这是所需输出的示例,假设我选择“2”作为密码复杂度:

['X', '$', 3, 8, 'd', '+', '_', 4, 'r', '%', 'E, 2]

import string 
import random
def password():
    password = []
    strength = input('How strong, from 1 to 3?')
    symbol_library= ["&", '+', "#","*", "£", "$", "+", "-", "."]
    gen_integer= password.append(random.randint(0,9))
    gen_letter= password.append(random.choice(string.ascii_letters))
    gen_letter2= password.append(random.choice(string.ascii_letters.lower()))
    gen_symbols = password.append(random.choice(symbol_library))
    func_list= [gen_integer, gen_letter, gen_symbols]
    func_list2 =  [gen_integer, gen_letter, gen_letter2, gen_symbols]
    if strength == '1':
        while len(password)<8:
            password.append(random.choice(func_list))

        print(password)

    elif strength == '2':
        while len(password)<12:
             password.append(random.choice(func_list2))


        print(password)

输出的示例从一次运行到下一次运行随机变化,但在列表达到给定输入目标长度(分别为 8 和 12)之前不会生成随机列表元素

How strong, from 1 to 3? 2
[6, 'X', 'v', '&', None, None, None, None, None, None, None, None]

标签: python

解决方案


所有这些都是None,因为.append()通常什么都不返回:

gen_integer= password.append(random.randint(0,9))
gen_letter= password.append(random.choice(string.ascii_letters))
gen_letter2= password.append(random.choice(string.ascii_letters.lower()))
gen_symbols = password.append(random.choice(symbol_library))

即使这样,这段代码:

func_list= [gen_integer, gen_letter, gen_symbols]
...
password.append(random.choice(func_list))

不调用任何gen_smth函数,它只是添加函数,嗯,指向函数的指针指向您的密码,而不是字母、标点符号或数字。


推荐阅读