【问题标题】:Why does my code run on one program but not the other?为什么我的代码在一个程序上运行而不在另一个程序上运行?
【发布时间】:2016-12-03 19:33:07
【问题描述】:

我正在编写一个简单的数字猜谜游戏,但我无法让我的代码在 SublimeREPL 或我的控制台中执行。我可以让它在 Team Treehouse 的 Workspaces 程序中执行的唯一方法,它完全按照它应该的方式工作。但是在我的控制台和 SublimeREPL 中,它都说有多个缩进错误。是什么赋予了??我知道 python 对它的缩进很挑剔,所以我确保更改我的 sublime 设置,以便每个选项卡都是四个空格,但它仍然无法运行 - 引发大约十个缩进错误,但据我所知,一切都是缩进的应该是。我尝试了多次搜索,但没有结果,我束手无策,无法运行这么简单的程序!我的意思是为什么代码会在一种环境中工作,而在另一种环境中却不行?我正在复制和粘贴代码,所以它没有什么不同......

代码如下:

import random

#safely make an int
#limit guesses
#too high, too low, messages
#play again

def game():
    #generate number
    secret_number = random.randint(1, 10)
    guesses = []

    while len(guesses) < 5:
        try:
            #get num guess from user
            guess = int(input("Guess a number between 1 and 10: "))
        except ValueError:
            print("That's not a valid number, try again.")

        else:
            #compare guess to secret number
            if guess == secret_number:
                #print hit/miss
                print("You got it! My number was {}".format(secret_number))
                break
            else:
                print("That's not it! Guess again!")
            guesses.append(guess)

game()

请注意,此代码在 Team Treehouse 上完美运行。 这是我在 SublimeREPL 和我的终端中收到的错误:

    Guess a number between one and ten: Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<string>", line 1
    if guess == secret_num:
     ^
SyntaxError: invalid syntax
>>>   File "<stdin>", line 1
    print("You got it!")
    ^
IndentationError: unexpected indent
>>>   File "<stdin>", line 1
    break
    ^
IndentationError: unexpected indent
>>>   File "<stdin>", line 1
    else:
    ^
IndentationError: unexpected indent
>>>   File "<stdin>", line 1
    print("That's not it!") 
    ^
IndentationError: unexpected indent
>>> >>> 

我真的更喜欢使用 Workspaces 以外的工具,这样我就可以在我的机器上拥有自己的代码,但我不知道这段代码是否真的可以工作,或者我只是在浪费时间学习垃圾......

【问题讨论】:

  • 这可能意味着您将空格和制表符混合到缩进中,这是您不应该做的。有些 IDE 可以很好地处理这个问题,有些则不能。
  • 我知道 pycharm 可以自动为您解决很多问题。我认为许多其他编辑也会这样做。
  • 在它工作的 IDE 中,查看它是否具有将所有缩进转换为空格或制表符的选项。然后,确保缩进的内容保持一致。
  • 现在我很困惑。我应该用制表符或空格缩进吗?因为有人告诉我这两种情况。
  • 我已经完全删除了程序中的缩进,并将其重新添加为制表符和空格,但都没有成功。相反,他们在 Team Treehouse 上工作,但不在我的控制台或 SublimeREPL 中。

标签: python console sublimerepl


【解决方案1】:

在 sublime 中打开你的代码,点击右下角的Spaces:4/Tab Size: 4。单击下拉列表中的Indent using spaces。它应该可以解决您的混合制表符和空格问题。

【讨论】:

  • 我已经这样做并删除了所有缩进并将其重新输入为制表符,然后删除并将它们也作为空格输入,但均无效..
【解决方案2】:

根据PEP-8,Python 样式指南,缩进应该包含 4 个空格。不应使用选项卡,除非您正在处理已使用选项卡的大型遗留 Python 2 项目。

要将缩进更改为所有空格,请选择 View → Indentation 并确保选择了 Indent Using SpacesTab Width: 4。然后,选择 View → Indentation → Convert Indentation to Spaces 将所有现有的制表符更改为空格。检查整个文件以确保缩进正确,然后保存并运行它。

【讨论】:

  • 刚刚这样做并得到了完全相同的错误。有趣的是,当我在工作区中使用此代码时(来自团队树屋的部分 ide),它可以完美执行并按预期工作。但我不想编写用于工作空间的软件。我希望它可以在其他程序和其他机器上工作,否则我所学的都是无用的.....
  • @LouieWilliford 请编辑您的问题以包含您收到的任何错误或追溯的全文,以便我们准确了解问题所在。
  • 为您编辑!非常感谢您的帮助,这严重困扰了我两天!
  • @LouieWilliford 我不知道发生了什么。我刚刚将您问题中的代码复制并粘贴到 Sublime 中的一个新 Python 文件中,保存它,打开一个 IPython REPL,选择 Tools → SublimeREPL → Eval in REPL → File,切换到 REPL,然后运行游戏,它完美运行。
  • 这非常令人沮丧。如果我什至不能在我自己的机器上写一门语言,那么学习一门语言有什么意义......
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多