Python使用random.choice随机选择列表及元素出错,请求协助
问题排查与修复
问题根源
你当前代码的核心错误是:
- 用
random.choice(['w','w1','w2','w3'])选的是字符串字面量(比如'w'),而非对应的列表对象 random.choice(f'{f"{e}"}')本质是在对字符串(比如'w3')做随机字符选取,而非从目标列表里选元素,所以输出才会是w3www3ww这类字符
修复方案
推荐直接把所有目标列表放进一个大列表,直接随机选择列表对象,再从中选元素,代码更直观且安全:
import random w=['*', '&' ,'^', '%' ,'$' ,'#', '@' ,'!'] w1=['w','a','s','r','i','t','e','n','d','c'] w2=['W','A','S','R','I','T','E','N','D','C'] w3=['1','2'] # 把所有列表放进一个容器 all_lists = [w, w1, w2, w3] p = '' j = 8 while j: # 随机选一个列表对象 selected_list = random.choice(all_lists) # 从选中的列表里随机选元素 q = random.choice(selected_list) p += q j -= 1 print(p)
另一种可选方案(不推荐)
如果一定要通过字符串名称获取列表,可以用globals()字典(但这种方式容易引发变量名错误,不建议):
import random w=['*', '&' ,'^', '%' ,'$' ,'#', '@' ,'!'] w1=['w','a','s','r','i','t','e','n','d','c'] w2=['W','A','S','R','I','T','E','N','D','C'] w3=['1','2'] p = '' j = 8 while j: # 选列表名称字符串 list_name = random.choice(['w','w1','w2','w3']) # 通过globals()获取对应的列表对象 selected_list = globals()[list_name] q = random.choice(selected_list) p += q j -= 1 print(p)
内容的提问来源于stack exchange,提问作者Beryl Amend
相关产品推荐
相关产品推荐

