使用 sys.stdin.readline() 从 Python 中的 cmd 读取多行
Using sys.stdin.readline() to read multiple lines from cmd in Python
我想在 运行
之后从命令行输入我的输入
if __name__ == "__main__":
data = list(map(int, sys.stdin.readline().split()))
print(data)
n, capacity = data[0:2]
values = data[2:(2 * n + 2):2]
weights = data[3:(2 * n + 2):2]
示例输入可以是:
2 40
20 2
30 3
我的问题是:
1) 如何使用我的输入创建列表数据?
2) 我怎样才能让 Python 知道我已经完成输入并且它应该执行其余的代码?
此问题的解决方案取决于您使用的OS。
基本上,如果你想要多行输入,你必须使用 sys.stdin.read()
而不是 sys.stdin.readline()
。由于 sys.stdin
是 Python 中的类文件对象,因此 read()
方法将一直读取到文件末尾。它由特殊字符 EOF
(文件结尾)标记。在不同的 OS 上有不同的发送方式。
在Windows:
输入后按Ctrl+Z然后按Enter:
2 10
20 2
30 3
^Z
基于 Unix OS:
输入后按Ctrl+D。不需要输入(我相信)
如果您想从输入中获取列表 [2, 10, 20, 2, 30, 3]
,没问题。 split()
方法按空格(空格、换行符等)拆分。
我同意@Leva7 所说的一切。尽管如此,我建议另一种解决方案,即对 Python 2 使用 raw_input
或对 Python 3 使用 input
,如下所示:
args = []
s = raw_input() # input() for Python 3
while s != '':
args.extend([int(arg) for arg in s.strip().split()])
s = raw_input()
当然,这在任何方面都不是单行的,但它完成了工作,而且很容易看出它是如何完成的。另外,输入末尾不需要特殊字符。
如果您在 Windows 上,请确保您使用换行符完成输入,否则 ^Z(通过按 Ctrl-Z)将包含在您的输入中。
还要确保您使用英语布局 -
我想在 运行
之后从命令行输入我的输入if __name__ == "__main__":
data = list(map(int, sys.stdin.readline().split()))
print(data)
n, capacity = data[0:2]
values = data[2:(2 * n + 2):2]
weights = data[3:(2 * n + 2):2]
示例输入可以是:
2 40
20 2
30 3
我的问题是:
1) 如何使用我的输入创建列表数据?
2) 我怎样才能让 Python 知道我已经完成输入并且它应该执行其余的代码?
此问题的解决方案取决于您使用的OS。
基本上,如果你想要多行输入,你必须使用 sys.stdin.read()
而不是 sys.stdin.readline()
。由于 sys.stdin
是 Python 中的类文件对象,因此 read()
方法将一直读取到文件末尾。它由特殊字符 EOF
(文件结尾)标记。在不同的 OS 上有不同的发送方式。
在Windows:
输入后按Ctrl+Z然后按Enter:
2 10
20 2
30 3
^Z
基于 Unix OS:
输入后按Ctrl+D。不需要输入(我相信)
如果您想从输入中获取列表 [2, 10, 20, 2, 30, 3]
,没问题。 split()
方法按空格(空格、换行符等)拆分。
我同意@Leva7 所说的一切。尽管如此,我建议另一种解决方案,即对 Python 2 使用 raw_input
或对 Python 3 使用 input
,如下所示:
args = []
s = raw_input() # input() for Python 3
while s != '':
args.extend([int(arg) for arg in s.strip().split()])
s = raw_input()
当然,这在任何方面都不是单行的,但它完成了工作,而且很容易看出它是如何完成的。另外,输入末尾不需要特殊字符。
如果您在 Windows 上,请确保您使用换行符完成输入,否则 ^Z(通过按 Ctrl-Z)将包含在您的输入中。 还要确保您使用英语布局 -