python - 为什么 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]
解决方案
所有这些都是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
函数,它只是添加函数,嗯,指向函数的指针指向您的密码,而不是字母、标点符号或数字。
推荐阅读
- linux - 基于 libc 程序集的 32 位 socketcall 系统调用如何工作?
- docker - 用于 Azure 服务结构的 docker hub 图像的 URL
- xcode - Xcode:命令 LinkStoryboards 失败,退出代码为非零
- database - 用于自动登录并执行 sql 脚本的 Shell 脚本
- spring - Spring-webflux 过滤器获取请求正文
- c - 可以在字符串中间将空字符传递给 argv 吗?
- php - 如何检查访问者是否在 Google Adsense 上查看过广告?
- javascript - 如何将旧 JavaScript 应用程序中的数据传递到 Angular 6 应用程序?
- c - 如何访问在 main 的另一个函数中创建的数组而不返回它?
- oracle - 请求的 URL /apex/apex_admin 失败