Random.choice 无法正常工作 python



例如,我有以下代码:

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">

正如Willem van Onsem在评论中正确提到的:

"...这真的是糟糕的设计,按名称呼唤是相当不安全的。你最好用字典。

所以,试试这个:

n = {'option1':'321','option2':'243','option3':'780'}
letter = random.choice(list(n.values()))

或者,更短,正如克里斯所提到的:

d = {'n':[321, 243, 780]}
letter = random.choice(d['n'])

print(letter)的结果(两个选项(:

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

我同意评论,最好使用以下内容:

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)

最新更新