调试“猜字游戏”

时间:2020-04-19 08:24:32

标签: python python-3.x

我的代码有一个小问题,当我把所有字母正确后,我只需要输入另一个字母就可以表明我没错。有什么问题吗?

import random
import string
import sys

def split(word):
    return list(word)

alphabet = 'abcdefghijklmnopqrstuvwxyz'
list(alphabet)

words = ['hat','pop' ,'cut' , 'soup' , 'you' , 'me' , 'gay' , 'lol' ]

guess_word = []
wrong_letters_storage = []
secret_word = random.choice(words)
word_length = print("the length of the word is " + str(len(secret_word)))
correct_letters = split(secret_word)


def words():
    for letter in secret_word:
        guess_word.append("-")
    return print("the words that you are guessing is " + str(guess_word))

def guessing():

    while True:
        c = 0
        b = 7
        while c <= 7:

            print("")
            hide = ""
            print("you have " + str(b) + " guess left")
            print("Wrong letters : " + str(wrong_letters_storage))
            command = input("guess: ").lower()

            if not '-' in guess_word:
                print("you win!")
                break
            elif command == 'quit':
                print("thank you for playing my game")
                break
            else:

                if not command in alphabet :
                   print("pick an alphabet")
                elif command in wrong_letters_storage:
                   print("you have picked this word")
                else :

                    if command in secret_word :
                        print("right")
                        c += 1
                        b -= 1

                        for x in range(0, len(secret_word)):
                            if correct_letters[x] == command:
                                guess_word[x] = command
                                print(guess_word)

                    elif not command in secret_word :
                        print("wrong")
                        wrong_letters_storage.append(command)
                        c += 1
                        b -= 1
                    else :
                        print("error")

            print("*"*20)
        return print("Thank you for playing my game")



words()
guessing()
print("the words that you are guessing is " + secret_word )

1 个答案:

答案 0 :(得分:1)

您的代码有几个“问题”:

  • 您检查当前解决方案中是否没有更多'-'之后,您要求下一个字符input()
  • return print("whatever")返回None,因为打印功能会打印并返回None
  • 您使用带有 single_letter_names 的变量,这使得很难知道它们的用途
  • 您使用list而不是set()进行查找(在这里很好,但不是最佳选择)

您可以通过将测试语句移至input()命令之前来解决问题:

# your code up to here

while True:
    c = 0
    b = 7
    while c <= 7:
        if not '-' in guess_word:
            print("you win!")
            break

        print("")
        hide = ""
        print("you have " + str(b) + " guess left")
        print("Wrong letters : " + str(wrong_letters_storage))
        command = input("guess: ").lower()

        if command == 'quit':
            print("thank you for playing my game")
            break
        else:

        # etc.

做一些重新整理可能会更好:

import random
import string
import sys

def join_list(l):
    return ''.join(l)

def guessing():
    # no need to put all this in global scope

    alphabet = frozenset(string.ascii_lowercase) # unchangeable set of allowed letters 

    words = ['hat', 'pop', 'cut', 'soup', 'you', 'me', 'beautiful', 'lol']

    secret = random.choice(words)       # your random word
    secret_word = list(secret.lower())  # your random word as lowercase list
    wrong = set()                       # set of wrongly guessed characters
    right = set()                       # set of already correctly guessed characters
    correct = frozenset(secret_word)    # set of letters in your word, not changeable

    guess_word = ['-' for k in correct] # your guessed letters in a list

    guesses = 7
    guessed = 0
    print("The length of the word is ", len(secret))

    # loop until breaked from (either by guessing correctly or having no more guesses)
    while True: 
            print("")
            print(f"you have {guesses-guessed} guess left")
            if wrong: # only print if wrong letters guessed
                print(f"Wrong letters : {wrong}")
            # print whats know currently:
            print(f"Guess so far: {join_list(guess_word)}")

            command = input("guess: ").strip().lower()
            try:
                if command != "quit":
                    command = command[0]
            except IndexError:
                print("Input one letter")
                continue

            if command == 'quit':
                print("thank you for playing my game")
                break
            else:
                if command not in alphabet:
                    print("pick an alphabet")
                    continue
                elif command in (wrong | right):
                    print("you already picked this letter")
                    continue
                else :
                    guessed += 1
                    # always lookup in set of lowercase letters
                    if command in correct:
                        right.add(command)
                        for i,letter in enumerate(secret_word):
                            if command == letter: 
                                # use the correct capitalisation from original word
                                guess_word[i] = secret[i] 
                    else:
                        print("wrong")
                        wrong.add(command)

            print("*"*20) 

            # break conditions for win or loose
            if join_list(secret_word) == join_list(guess_word):
                print("You won.")
                break
            elif guessed == guesses:
                print(f"You lost. Word was: {join_list(secret_word)}")
                break

guessing()