【问题标题】:What's the equivalent for while (cin >> var) in python?python中while(cin >> var)的等价物是什么?
【发布时间】:2015-03-11 14:58:31
【问题描述】:

在在线比赛中,当输入的长度没有指定,并且无法通过程序直接读取输入文件时,可以在C++中使用这段代码:

while (cin >> var)
{
    //do something with var
}

python的等价物是什么?

  • 不使用任何与文件相关的函数,例如open() write() ...

【问题讨论】:

  • 你可以打电话给input()/raw_input(),但这更像是cin.getline()。我认为没有直接等价于提取运算符。
  • 还有for line in sys.stdin: ...,但同样,这肯定不是直接等同于提取运算符。

标签: python c++ input


【解决方案1】:

在 Python 中没有直接的等价物。但是你可以用两个嵌套循环来模拟它:

for line in sys.stdin:
    for var in line.split():

如果您需要字符串以外的内容,则需要在单独的步骤中进行转换:

        var = int(var)

【讨论】:

    【解决方案2】:

    这可能会有所帮助。

    import sys
    
    for line in sys.stdin:
        #Do stuff
    

    【讨论】:

    • 不一样 - std::cin >> var 期望与 var 的类型兼容输入; line in sys.stdin 显然不一样(var 可能是 int, char, std::string, ...)
    【解决方案3】:

    在 C++ 中,cin >> n 具有双重性质:它既充当 布尔表达式,指示它是否已读取 (true) 或未读取 (false) 序列中的元素,又充当一个 "channel in" 操作符,它获取一个元素(如果有的话)。可悲的是,在 python 中,最接近的开箱即用方法是执行 n = input(),它也充当“通道”但不充当布尔表达式

    为了解决这个问题(通过使用“C++onic”而不是“Pythonic”),您可以定义一个辅助函数,方便地称为cin()。这个函数将有一个参数n,它实际上就像是一个 C++ 传递引用(即输入/输出参数)一样工作。为了模拟这种行为,我将n 设为一个具有一个元素的列表对象——在本例中是一个整数——,利用Python 列表的别名属性。这样,当n[0]在辅助方法中发生变化时,每次cin(n)调用返回true时,值的变化也会反映到主方法n[0]的值中......无需再做任何事情。

    def cin(n):
        #function that woks equally to doing cin >> n
        try:
            n[0] = int(input())
            return True
        except:
            return False
    
    def main():
        #C++ like main method (for illustrative/comparative purposes)
        n = [0]
        while cin(n):
            #MESSAGE: do someting with n[0] (watch out, n is list object with one element)
    
    main()
    

    例如,在前面的代码中,如果你想打印一个数字序列的元素的双精度数,它们的数量不定,你只需将#MESSAGE 行更改为以下内容:

    print(n[0]*2)
    

    或者,另一个例子,如果你想实现一个递归解决方案,以相反的顺序打印一个序列的元素(也是无限长度的),并且有一个约束条件是不使用一个包含多个元素的列表,你会再次,需要将#MESSAGE 行更改为以下内容:

    main()
    print(n[0])
    

    【讨论】:

      【解决方案4】:

      编写如下代码

      while True: a=input() if(a==''): break else ..... .

      在 else 部分,您编写要执行的代码 如果您想在代码中使用 int ,请将其转换为 int 并使用它

      【讨论】:

        【解决方案5】:

        std::cin 的一个关键功能是it skips whitespace(因此,竞争编程问题是空格和换行符分隔)。我建议像其他答案建议的那样一次读取和处理一行,但可以在生成器中使用str.split()模拟一次读取一个数字,如 C++ std::cin >> n 用法:

        import sys
        
        def stdin_gen():
            for x in sys.stdin.read().split():
                yield int(x)
        
        
        cin = stdin_gen()
        
        x = next(cin)
        y = next(cin)
        print(x, y)
        

        【讨论】:

          猜你喜欢
          • 2019-04-04
          • 1970-01-01
          • 2013-10-18
          • 1970-01-01
          • 2011-09-03
          • 2011-03-07
          • 2011-03-27
          • 2021-06-19
          • 2017-04-20
          相关资源
          最近更新 更多