2016-10-07 2 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 является, как определено, случайная. В результате вы случайно получите правильный результат.

Быстрое исправление с помощью метода tuple.index, получить индекс элемента внутри кортежа Words, а затем использовать этот индекс на Hints, чтобы получить соответствующее слово, ваш оператор печати выглядит как:

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

Это делает трюк, но неуклюж. Python имеет структуру данных, называемую словарем, с помощью которой вы можете сопоставить одно значение с другим. Это может сделать вашу жизнь проще в долгосрочной перспективе. Для создания словаря из двух кортежей мы можем zip их вместе:

mapping = dict(zip(Words, Hints)) 

и создать структуру, которая выглядит следующим образом:

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

Это помогает.

Еще одна деталь, которую вы можете исправить, заключается в том, как вы создаете new_word; вместо зацикливания вы можете использовать понимание, чтобы создать соответствующие буквы, а затем join их на пустой строке "", чтобы создать результирующую строку:

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

с точно таким же эффектом. Теперь, поскольку у вас также есть словарь mapping, получить соответствующий совет легко, просто поставьте ключ new_word на номер mapping, и он вернет ключ.

Пересмотренный вариант кода выглядит следующим образом:

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]) 
Смежные вопросы