2017-04-01 66 views
0

我有例如下面的代碼: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'

+4

其實你做**不**需要那個,那是非常糟糕的設計:名稱是相當不安全的。你最好用一本字典。 –

+1

但''n''不是一個列表,它是一個字符串; 'n'是一個列表。 –

+0

我會使用字典,但我真的不想使用一個,除非你可以分配變量到字典中的列表。 –

回答

2

正如威廉·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

等。

+0

哦,我想我可以做這個工作,我會嘗試一下,如果有效,就回復。 –

+0

我仍然無法使它工作:/ –

+0

什麼是錯誤? – Montmons

1

好的,你有幾個基本問​​題。 當你想分配一個變量到另一個時,你不會把它放在引號中。 所以它應該是:

code = n 

但實際上我不知道爲什麼你需要的變量的代碼在所有。 你可以簡單地做

import random 
code = [ '321', '243', '780' ] 
letter = random.choice(code) 
print letter 
+0

我不能這樣做。在更大的圖片中,我將從for循環獲取代碼,所以我希望它從不同列表中隨機取得一個元素。 –

+0

請參閱Willem van Onsem對原始問題的評論,名字是不好的設計.. – Montmons

+0

像ie我有'a','b','c'列表,我做了一個循環,將返回'a' ,'b'或'c',所以我希望它從相應的列表中取出一個隨機元素。 –

1

我的評論表示贊同,最好是使用類似:

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)