如何在特定游戏的列表中找到重复项?

2024-04-25 15:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我一直在写这个刽子手的代码,除了一个问题,差不多都完成了。如果一个单词中有多个相同的字母,则只有一个字母附加在后面。我该如何使它附加所有的字母

代码:

import getpass

hangman_pics = ['''
    +---+
        |
        |
        |
       ===''','''
    +---+
    O   |
        |
        |
       ===''','''
    +---+
    O   |
    |   |
        |
       ===''','''
    +---+
    O   |
   /|   |
        |
       ===''','''
    +---+
    O   |
   /|\  |
        |
       ===''','''
    +---+
    O   |
   /|\  |
   /    |
       ===''','''
    +---+
    O   |
   /|\  |
   / \  |
       ===''']

let_list = []
word_list = []
alreadyGuessed = []
correctGuessed = []
falseGuessed = []
statusList = []

def player_input():
    word_input = getpass.getpass("Choose the word: ")
    for letter in word_input:
        let_list.append(letter)


def get_status():
    theStar = '_'
    for x in range(len(let_list)):
        statusList.append(theStar)
    while len(let_list) < len(statusList):  
        statusList.pop()


def player_guess():
    while let_list:
        print (hangman_pics[len(falseGuessed)]) #Got this from the tutorial
        print ("Please enter your guess: ")
        guess = input()
        if guess in let_list:
            if guess in alreadyGuessed:
                print ('Oops, you already guessed ' + guess)
            else:
                alreadyGuessed.append(guess)
                correctGuessed.append(guess)
                print (guess + ' is correct!')
        else:
            alreadyGuessed.append(guess)
            falseGuessed.append(guess)
            print (guess + ' is wrong, sorry')
        while set(let_list) == set(correctGuessed):
            print ('Congratulations! You win!')
            get_status()
            word_status(guess)
            return False
        while len(falseGuessed) == len(hangman_pics):
            print ('Oh no, you killed him! You lose :(')
            get_status()
            word_status(guess)
            return False
        get_status()
        word_status(guess)


def word_status(guess):
    if guess in let_list:
        guess_index = let_list.index(guess)
        del statusList[guess_index]
        statusList.insert(guess_index,guess)
    print ("The Word: ", statusList)

def letter_dup(guess,let_list):             #working on it.
    while let_list.count(guess) > 1:
        statusList.append(guess)
        let_list.remove(guess)



player_input()
player_guess()

Tags: ininputlendefstatuslistwordprint
1条回答
网友
1楼 · 发布于 2024-04-25 15:27:50

你的问题是,如果每个字母都在单词中,你就把它附加在alreadyGuessed后面一次,如果这个单词有许多相同字母的实例,那么你就不会让它被接受。一个更好的解决方案是从let\ u列表中删除字母,这样就根本不需要预先添加字母了

但代码中还有更多问题: 那些while循环应该是if条件 当您比较时:

set(let_list) == set(correctGuessed)

“abba”这个词是真的,猜测“a”和“b”,因为

set('abba') == set('ab')

相关问题 更多 >