2014-12-06 2 views
0

У меня есть объект словаря;Python - помощь словаря, проверка наличия символа в объекте словаря

secret = {"word" : secretWord} 

secretWord быть аргументом для строки с одним словом внутри. У меня также есть строка, генерирующая звездочку (*) для каждого символа в secretWord. В моем коде у меня есть ввод от пользователя, который дает письмо.

То, что я хочу выполнить, - это проверить внутри словарного объекта secretWord, и если да, замените любую звездочку на вход, если это необходимо. Однако я не уверен, как сохранить это как новый аргумент, а затем использовать следующий ввод нового аргумента.

Извините, если мой вопрос/проблема не ясна, поскольку я борюсь, как сказать это.

То, что я хочу, чтобы это произошло:

, например, secretWord может быть 'PRECEDENCE'

>>> 
WORD : ********** 
Guess a letter: e 
**E*E*E**E 
Guess a letter: p 
P*E*E*E**E 
etc 

Что происходит:

>>> 
WORD : ********** 
Guess a letter: e 
**E*E*E**E 
Guess a letter: p 
P********* 
etc 

Мой текущий код:

import random 
import sys 

def diction(secretWord, lives): 

    global guess 
    global secret 

    secret = {"word" : secretWord, "lives" : lives} 
    guess = len(secret["word"]) * "*" 
    print (secret["word"]) 
    print ("WORD: ", guess) 

fileName = input("Please insert file name: ") 

def wordGuessed(guess, secret): 
    if guess == secret["word"]: 
     print ("word is guessed") 
    if guess != secret["word"]: 
     print ("word is not guessed") 

def livesLeft(inpu): 
    if inpu not in secret["word"]: 
     secret["lives"] = secret["lives"] - 1 
     print("Lives left: ", secret["lives"]) 
    if inpu in secret["word"]: 
     print("Correct guess") 
     print(secret["lives"]) 


def guessCheck(inpu): 
    for char in secret["word"].lstrip(): 
     if char == inpu: 
      print (char, end= "") 
     elif char != secret["word"]: 
      print ("*", end="") 


try: 
    f = open(fileName) 
    content = f.readlines() 
except IOError as e : 
    f = None 
    print("Failed to open", fileName, "- program aborted") 
    sys.exit() 

Run = True 

while Run == True: 
    levelIn = input("Enter difficulty (easy, intermediate or hard): ").lower() 
    if levelIn == ("easy"): 
     lives = 10 

    elif levelIn == ("intermediate"): 
     lives = 8 

    elif levelIn == ("hard"): 
     lives = 5 

    else: 
     print("Please input a valid difficulty.") 
     break 



    secretWord = (random.choice(content)) 
    secretWord = secretWord.replace("\n", "") 


    diction(secretWord, lives) 
    wordGuessed(guess, secret) 

    while secret["lives"] > 0: 
     inpu = input("Guess a letter: ").upper() 
     livesLeft(inpu) 
     guessCheck(inpu) 
    if secret["lives"] == 0: 
     print ("You have no lives left – you have been hung!") 
     print ("The word was,", secret["word"]) 
+0

Таким образом, вы реализующий палач игру. Можете ли вы показать нам свой код, пожалуйста? –

+0

Каков ваш текущий код для процесса? – JAL

+0

@JAL Для всей текущей программы код был добавлен. Извините, если это грязно. –

ответ

0

Вам нужно отследить догадки до сих пор и использовать их для отображения слова. Используйте набор для отслеживания того, что игрок уже догадался:

guessed = set() 

Так что вы можете сделать:

if inpu in guessed: 
    print('You already tried that letter!') 
else: 
    guessed.add(inpu) 

всякий раз, когда пользователь делает предположение.

Вы можете использовать этот набор, чтобы отобразить слово раскрывается до сих пор:

for char in secret["word"].lstrip(): 
    if char in guessed: 
     print (char, end="") 
    else: 
     print ("*", end="") 
+0

где я должен поместить код, чтобы проверить, уже ли ввело угаданное письмо? –

+0

@SeanBrackenborough: как можно ближе к введенному входу; это также зависит от того, насколько вы хотите считать повторное предположение как потерянную жизнь. –

+0

Я попытался ввести код, чтобы проверить, находится ли вход в наборе уже, прямо под вводом буквы, но когда я запускаю программу, он реализует инструкции if или else. –

Смежные вопросы