Python缩进问题(Number Guess游戏)

时间:2018-06-19 23:03:58

标签: python

当我尝试运行我的代码时,它说:

if again == "y":
                ^
  

TabError:缩进中的制表符和空格使用不一致

我的代码是:

import random

def game():
    wrong_guesses = [1,2,3,4,5]
    num = random.randint(0,100)
    guess = input("Guess a number bewtween 1 and 100, you have five tries ")

    def wrong_guess():
        wrong_guesses.remove()
        print("That is not the number, You have {} guesses left".format(len(wrong_guesses)))

    def right_guess():
        if guess == num:
            print("Congratulations! You guessed the number. You had {} guesses left".format(len(wrong_guesses)))
            play_again()

    def game_over():
        if len(wrong_guesses) == 0:
            break
            play_again()

    def play_again():
        again = input("Would you like to play again? [y/n}")

        if again == "y":
            game()   
        elif again == "n":
            break

game()

2 个答案:

答案 0 :(得分:1)

这个问题已经回答了很多次,例如:"inconsistent use of tabs and spaces in indentation"

因此,首先,请先寻找答案,然后再在StackOverflow上在此处发布新问题。

但是,请提供我的答案版本:

TabError会告诉您代码为什么不运行的确切原因。制表符与空格的使用不一致(例如,您同时使用 制表符和空格)。解决方案是选择选项卡或空格,然后仅切换到该选项卡或空格。

虽然Python不需要您专门使用一个,但PEP8样式指南建议使用空格。您应该能够配置编辑器以将制表符转换为空格。 PEP8:https://www.python.org/dev/peps/pep-0008/

尽管在语法上正确,但您可能应该将elif函数中的play_again子句更改为else(或至少 add 一个{ else之后的{1}}子句;我说这是因为您目前不处理“ y”和“ n”以外的任何输入。更不用说您的代码是递归地调用elif,而不是在无限循环中运行,这将导致程序在特定点崩溃。为此,我建议将游戏重构到game()循环,然后while True:会退出游戏循环-传统上,这是游戏循环在更高层次上的工作方式。

答案 1 :(得分:0)

错误说明了一切。

  

TabError:缩进中的制表符和空格使用不一致

这意味着您的代码中必须包含交织的空格和制表符。尝试删除所有空白并仅使用空格(用4代替制表符)。