在python中,while(cin >> var)的等价物是什么?

What's the equivalent for while (cin >> var) in python?

本文关键字:gt 等价物 是什么 var python while cin      更新时间:2023-10-16

在线竞赛中,当未指定输入长度且无法直接通过程序读取输入文件时,可以在C++中使用以下代码:

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

蟒蛇的等价物是什么?

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

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

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

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

        var = int(var)

这可能会有所帮助。

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

In C++ cin >> n具有双重性质:它既充当布尔表达式,指示它是否已读取(true)或未读取(false)序列中的元素,并充当获取元素(如果有剩余元素)的"channel in"运算符。可悲的是,在python中,你可以开箱即用的最接近的是做n = input(),它也充当"通道",但不充当布尔表达式

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

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])

std::cin的一个关键功能是它跳过空格(由于这个原因,竞争编程问题是空格和换行符分开)。我建议像其他答案一样一次读取和处理一行,但可以在生成器中使用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)

编写以下代码

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

在 else 部分中,您编写要执行的代码如果你想在你的代码中使用 int 把它转换成 int 并使用它