2017-04-01 3 views
0

I例えば次のコードを持って:あなたは言葉その後、「NBA」を入力した場合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」などの出力、私はランダムな要素を出力することをお勧めしますがそれぞれの手紙のそれぞれのリストから「32112178」など

+4

実際にあなたは**本当に悪いデザインであることを望んでいません**:名前による呼び出しはかなり安全ではありません。あなたは辞書を使うことをお勧めします。 –

+1

しかし '' n''はリストではなく、文字列です。 'n'はリストです。 –

+0

辞書を使うつもりでしたが、辞書のリストに変数を割り当てることができない限り、実際には使いたくありません。 –

答えて

2

を行うことができます:。

」...それは、コールによって、名前ではなく、安全でない、本当に悪いデザインですあなたはより良い使用します辞書。"

ので、これを試してみてください。

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

EDIT :余分な変数を追加する方法

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

をSECOND EDIT(そのため、最適化されていません。しかし、それにもかかわらず作業...):

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

元の質問へのウィレム・ヴァン・オンセムのコメントを参照してください。名前の呼称は悪いデザインです。 – Montmons

+0

私は 'a'、 'b'、 'c'リストを持っているのと同じように 'for' 、 'b'または 'c'なので、それぞれのリストからランダムな要素を取り除きたいと思っています。 –

1

を行うことができ、のようなものを使用した方がよい:

d = {'n':[mylist]} 
letter = random.choice(d['n']) 

問題を文字列にrandom.choice作品はあまりにも...それは単にそれらを考慮することです文字のリスト。あなたのケースでは、コード変数とnはまったく同じであるはずですが、実際はそうではありません。ウィレムバンOnsemが正しくコメントで述べたように、あなたはまた、

n = [list] 
code = n ## only makes any sense, if there 
     ## is a procedure assigns it based on some condition 
letter = random.choice(code) 
関連する問題