簡體   English   中英

Python中字典項加法的問題(猜字游戲)

[英]Question about dictionary items addition in Python (Guess the word game)

如何在字典的不同鍵中多次添加一個字母? 我做了一個猜字游戲,用戶輸入字母來完成神秘的單詞。 對於字母只出現一次的單詞(例如狗),一切都很好,但是當字母出現多次(例如員工)時我會遇到問題,因為只有第一個被填充。

我知道這可能不是最有效的方法,但我開始用 python 編程,並且正在對所學的概念進行一些試驗。

代碼如下,感謝幫助:

import os

word = input('choose the word to play with: ')
os.system('cls')

word_list = list(word)
word_dict = {}

for x in range(len(word_list)):
    word_dict[str(x)] = word_list[x]


guess_dict = {}

for x in range(len(word_list)):
    guess_dict[str(x)] = '_'


health = 10

victory = False

values = list(guess_dict.values())
print(values)

while victory == False:

    letter = input('Choose the letter: ')
    if letter in word_dict.values():
        guess_dict[list(word_dict.keys())[list(word_dict.values()).index(letter)]] = letter
        valori = list(guess_dict.values())
        print(valori)
        print()
        if guess_dict == word_dict:
            victory = True
            print ('You won')
    else:
        health -= 1
        print('ERROR!! ' + str(health) + ' lives remaining')
        if health == 0:
            print('You lose')
            break

你的問題正是字典。 字典中每個鍵只有一個條目。 這里

在我看來,您應該使用列表或字典列表。

import os

word = input('choose the word to play with: ')
os.system('cls')

word_list = list(word)
guess_list = [{'character': x, 'guessed': False} for x in word]


health = 10
victory = False


while True:
    str = ''
    for item in guess_list: #generate the string each iteration once
        if False == item['guessed']:
            str = str + "'_'"
        else:
            str = str + "'" + item['character'] + "'"
    print(str)

    if True == victory: #put the test here, so that the result is printed
        print('You won!')
        break

    else:
        letter = input('Choose the letter: ')
        hit = False
        missed_cnt = 0
        for item in guess_list:
            if item['character'] == letter: #if letter guessed, set flag
                item['guessed'] = True
                hit = True

            if item['guessed'] == False:    #count unguessed letters
                    missed_cnt +=1

        if False == hit:
            health -= 1
            print('ERROR!! {0} lives remaining'.format(health))

            if 0 == health:
                print('You lose!')
                break

        if 0 == missed_cnt: #exit only after printing result
            victory = True

我會簡單地使用一個字母列表:

import os
from copy import deepcopy

word = list(input('choose the word to play with: '))
compare = deepcopy(word)
os.system('cls')

guess = []
for index, letter in enumerate(word):
    guess.append('_')

health = 10
victory = False

while not victory:

    letter = input('Choose the letter: ')
    if letter in compare:
        guess[compare.index(letter)] = letter
        compare[compare.index(letter)] = ' '
        print(guess)
        print()
        if guess == word:
            victory = True
            print ('You won')
    else:
        health -= 1
        print('ERROR!! ' + str(health) + ' lives remaining')
        if health == 0:
            print('You lose')
            break

一開始的deepcopy是因為在 Python 中,如果您執行compare = wordcompare將成為指向word的指針。 順便說compare ,變量compare是從中刪除已經猜到的字符。

您還可以檢查輸入字母以使代碼更健壯:

while not victory:

    letter = input('Choose the letter: ')

    try:
        value = float(letter)
        print('Please enter a letter of type (str).')
        continue
    except ValueError:
        pass

    if len(letter) != 1:
        print('Please enter only one letter!')
        continue

您可以使用 set() 代替字典。 由於猜測一個字母會顯示該字母的所有實例,因此將其從集合中移除對應於相同的概念。

所以你可以做這樣的事情:

word = input("hidden word:")
remainingLetters = set(word)

health = 10
while True:
    print( "".join( "_" if letter in remainingLetters else letter for letter in word) )
    letter = input("guess a letter:")
    if letter in remainingLetters:
        remainingLetters.remove(letter)
        if remainingLetters: continue
        print("you Win!")
        break
    health -= 1
    if health == 0:
        print("You lose")
        break
    print('ERROR!! {0} lives remaining'.format(health))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM