2016-10-07 10 views
0

単語推測プログラムを作成しようとしていますが、並列タプルの印刷に問題があります。対応するヒントで"secret word"を印刷する必要がありますが、私が書いたコードは機能しません。私はどこが間違っているのか分かりません。Pythonで並列タプルを印刷する

任意の助けいただければ幸いです:)

これは、これまでの私のコードです:

import random 

Words = ("wallet","canine") 
Hints = ("Portable money holder","Man's best friend") 
vowels = "aeiouy" 
secret_word = random.choice(Words) 
new_word = "" 


for letter in secret_word: 
    if letter in vowels: 
     new_word += '_' 
    else: 
     new_word += letter 

maxIndex = len(Words) 

for i in range(1): 
     random_int = random.randrange(maxIndex) 
print(new_word,"\t\t\t",Hints[random_int])   

答えて

0

ここでの問題はrandom_intは、ランダム定義されている、ということです。その結果、時々正しい結果が無作為に得られます。

print(new_word,"\t\t\t",Hints[Words.index(secret_word)]) 

クイックフィックスはtuple.indexメソッドを使用している、あなたのprint文は次のように見て、タプルWords内の要素のインデックスを取得してから、対応する単語を取得するためにHintsにそのインデックスを使用これはトリックですが、clunkyです。 Pythonには、ある値を別の値にマッピングできる辞書というデータ構造があります。これは長期的にあなたの人生を楽にすることができます。我々はそれらを一緒にzipできる2つのタプルから辞書を作成するには、次の

mapping = dict(zip(Words, Hints)) 

とのように見える構造を作成:これは役立ちます

{'canine': "Man's best friend", 'wallet': 'Portable money holder'} 

を。

解決できるもう一つの詳細は、new_wordの作成方法です。まったく同じ効果を持つ

new_word = "".join("_" if letter in vowels else letter for letter in secret_word) 

:代わりに、あなたは、結果の文字列を作成するには、空の文字列""にそれぞれの文字と、その後joinこれらを作成するために理解を使用することができ、ループの。今度は辞書mappingがあるので、それぞれのヒントを得るのは簡単です。new_wordmappingに入力すれば、キーが返されます。

あなたのコードの改訂版は、次のようになります

import random 

Words = ("wallet", "canine") 
Hints = ("Portable money holder", "Man's best friend") 
mapping = dict(zip(Words, Hints)) 
vowels = "aeiouy" 
secret_word = random.choice(Words) 

new_word = "".join("_" if letter in vowels else letter for letter in secret_word) 

print(new_word,"\t\t\t", d[secret_word])