【问题标题】:How does raw_input treat ENTER or \nraw_input 如何处理 ENTER 或 \n
【发布时间】:2015-04-09 17:07:58
【问题描述】:

我有一长串数字,我想通过 raw_input 将它们输入到我的代码中。它包括通过SPACESENTER/RETURN 隔开的数字。该列表看起来像 this 。当我尝试使用函数 raw_input 并复制粘贴一长串数字时,我的变量只保留第一行数字。到目前为止,这是我的代码:

def main(*arg):
    for i in arg:
        print arg

if __name__ == "__main__": main(raw_input("The large array of numbers"))

如何让我的代码继续读取其余数字? 或者如果这不可能,我可以让我的代码以任何方式确认 ENTER 吗?

附:虽然这是一个项目欧拉问题,但我不想要回答项目欧拉问题的代码,或者对数字进行硬编码的建议。只是将数字输入我的代码的建议。

【问题讨论】:

  • 为什么要尝试通过 raw_input 输入列表?我不认为你应该这样做
  • 想象一下 raw_input 确实读取了换行符 - 它怎么知道何时停止?
  • 我已删除我的答案,以支持对该问题的更好答案。

标签: python input


【解决方案1】:

如果我正确理解了您的问题,我认为这段代码应该可以工作(假设它在 python 2.7 中):

sentinel = '' # ends when this string is seen
rawinputtext = ''
for line in iter(raw_input, sentinel):
    rawinputtext += line + '\n' #or delete \n if you want it all in a single line
print rawinputtext

(代码取自:Raw input across multiple lines in Python

PS:或者更好的是,你可以在一行中做同样的事情!

rawinputtext = '\n'.join(iter(raw_input, '') #replace '\n' for '' if you want the input in one single line

(代码取自:Input a multiline string in python

【讨论】:

    【解决方案2】:

    我认为您实际上正在寻找的是通过sys.stdin 直接从stdin 读取。但是您需要接受这样一个事实,即应该有一种机制来停止接受来自stdin 的任何数据,在这种情况下,通过传递EOF 字符是可行的。 EOF 字符通过组合键 [CNTRL]+d 传递

    >>> data=''.join(sys.stdin)
    Hello
    World
    as
    a
    single stream
    >>> print data
    Hello
    World
    as
    a
    single stream
    

    【讨论】:

    • 您能再解释一下吗?我从未听说过 stdin 或您放在它前面的 .join。
    • @RonaldRojas:我认为这很简单。标准输入标准输入是一个类似于标准输入的可迭代对象的文件。 ''.join 是字符串连接方法,它使用标准输入直到达到 EOF。当用户故意输入 [CNTRL]+d 时到达 EOF
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2019-01-24
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2010-12-02
    • 2017-08-14
    相关资源
    最近更新 更多