为什么我的print和raw_input行之间有一个空行?

时间:2015-01-27 19:05:05

标签: python

我一直在疯狂地搜索,但我还没发现为什么我的代码在raw_input和print行之间打印了一个额外的空行。

这就是它的样子:

print "--------------------------"
print "You have " + str(guesses) + " guesses left."
print "Available Letters: "  + getAvailableLetters(lettersGuessed) + "."
letterGuessed = raw_input("Please guess a letter: ")

这是我得到的输出:

--------------------------
You have 8 guesses left.
Available Letters: abcdefghijklmnopqrstuwxyz.

Please guess a letter:

这就是我想要的样子:

--------------------------
You have 8 guesses left.
Available Letters: abcdefghijklmnopqrstuwxyz.
Please guess a letter:

如果有人能解释为什么会发生这种情况,我真的很感激!

这是getAvailableLetters的代码:

def getAvailableLetters(lettersGuessed):
    import string
    str = string.ascii_lowercase
    for char in lettersGuessed:
        if char in str:
            str = str.replace(char, "") 
    return str

完整代码:https://gist.github.com/anonymous/cd6314470a5696181c10

某些功能未被使用,请忽略它们。

2 个答案:

答案 0 :(得分:2)

尽管我不是Canopy的粉丝,但我认为它的Canopy bug是不公平的。我认为在使用涉及在IDE中包含IPython的raw_input时会出现问题。为什么呢?

我的测试代码是:

print "Error if there is an extra line before 1"
print "Error if there is an extra line before 2"
guess = raw_input("This line should follow directly")

我在许多环境中测试了代码(Python 2.7):

  • Canopy:失败
  • 带有IPython窗口的Spyder:失败
  • Jupyter QtConsole中的IPython:失败

  • ipython:good
  • python:good
  • Spyder使用Python控制台。

因此,我得出结论,IPython在非终端环境中由于某种原因在raw_input()之前生成了额外的换行符。请注意,这仍适用于使用输入的Python 3.5。

enter image description here

答案 1 :(得分:1)

编辑评论中讨论的结论是Canopy IDE中的一个错误。

您向我们展示的代码不是您正在运行的代码。

您的输出是:

Available Letters: abcdefghijklmnopqrstuwxyz.

应该由此打印(注意末尾添加的点):

print "Available Letters: "  + getAvailableLetters(lettersGuessed) + "."

但是getAvailableLetters还在其返回值的末尾添加了一个点。

def getAvailableLetters(lettersGuessed):
    import string
    str = string.ascii_lowercase
    for char in lettersGuessed:
        if char in str:
            str = str.replace(char, "") 
    return str + '.'

所以输出应该是这样的:

Available Letters: abcdefghijklmnopqrstuwxyz..

我的结论是您向我们展示的代码以及您运行的代码不一样。我建议将代码粘贴到某个地方让我们完全检查。 Github Gist会这样做。