Random.choice工作不正常蟒蛇
我有例如下面的代码:Random.choice工作不正常蟒蛇
n = ['321','243','780']
b = ['12','56','90']
a = ['178', '765', '111']
E = input('Enter Word...')
qw = 1
Code = ('')
E_ready = [E[no:no+qw] for no in range(0, len(E), qw)]
for code in E_Ready:
letter = random.choice(code)
Code += letter
如果你输入单词“NBA”,那么它将作为“NBA”输出,我希望它与随机元素输出从每个字母各自的列表,例如'32112178'
正如威廉·Onsem在评论中提到正确。
” ...这是非常糟糕的设计,调用 - 名字是相当不安全的,你最好使用字典。”
所以,试试这个:
n = {'option1':'321','option2':'243','option3':'780'}
letter = random.choice(list(n.values()))
或者更短,克里斯提到:从print(letter)
d = {'n':[321, 243, 780]}
letter = random.choice(d['n'])
结果(两个选项):
321
321
780
243
etc..
编辑 :
如何添加额外的变量:
n = 'n'
d = {n:[321, 243, 780]}
letter = random.choice(d[n])
q = 'q'
d[q] = [600, 234, 180]
new_letter = random.choice(d[q])
现在print(new_letter)
给出:
234
180
180
600
etc..
第二个编辑(这顺便说一句是纯粹的奖金,因为这个问题变成了一个完全不同的一个,然后第一问道,因此,它没有得到优化。然而,工作仍然..):
import random
d = {'n':[321, 243, 780], 'b':['12','56','90'], 'a':['178', '765', '111']}
E = input('Enter Word...')
inputword = list(E)
for key in d.keys():
if key in inputword:
for i in range(len(inputword)):
if inputword[i] == key:
try:
inputword[i] = str(random.choice(d[key]))
except:
pass
result = ''.join(inputword)
print(result)
如果输入= nba
然后输出= 32190111
如果输入= nhhsygbbvvra
然后输出= 321hhsyg5690vvr178
等。
好的,你有几个基本问题。 当你想分配一个变量到另一个时,你不会把它放在引号中。 所以它应该是:
code = n
但实际上我不知道为什么你需要的变量的代码在所有。 你可以简单地做
import random
code = [ '321', '243', '780' ]
letter = random.choice(code)
print letter
我不能这样做。在更大的图片中,我将从for循环获取代码,所以我希望它从不同列表中随机取得一个元素。 –
请参阅Willem van Onsem对原始问题的评论,名字是不好的设计.. – Montmons
像ie我有'a','b','c'列表,我做了一个循环,将返回'a' ,'b'或'c',所以我希望它从相应的列表中取出一个随机元素。 –
我的评论表示赞同,最好是使用类似:
d = {'n':[mylist]}
letter = random.choice(d['n'])
问题是random.choice
作品上串太...它只是他们认为,以是一个字符列表。在你的情况下,代码变量和n应该是完全一样的,但事实上并非如此。你也可以做
n = [list]
code = n ## only makes any sense, if there
## is a procedure assigns it based on some condition
letter = random.choice(code)
其实你做**不**需要那个,那是非常糟糕的设计:名称是相当不安全的。你最好用一本字典。 –
但''n''不是一个列表,它是一个字符串; 'n'是一个列表。 –
我会使用字典,但我真的不想使用一个,除非你可以分配变量到字典中的列表。 –