我熟悉input()函数,从用户输入读取单个变量。是否有类似的简单方法来读取两个变量?
我正在寻找相当于:
scanf("%d%d", &i, &j); // accepts "10 20\n"
我能够实现此目的的一种方法是使用raw_input()
然后使用split
输入的内容。有更优雅的方式吗?
这不适合现场使用。只是为了学习..
答案 0 :(得分:28)
不,通常的方式是raw_input().split()
在您的情况下,如果您希望它们是整数而不是字符串,则可以使用map(int, raw_input().split())
请勿使用input()
。考虑一下如果用户输入
import os;os.system('do something bad')
答案 1 :(得分:9)
您也可以从sys.stdin
中读取import sys
a,b = map(int,sys.stdin.readline().split())
答案 2 :(得分:5)
我也很喜欢这个东西。从python.org网站做了一些研究,并进行了一些黑客攻击。 raw_input 功能又回来了,从输入更改了。这就是我想出的:
i,j = raw_input("Enter two values: ").split
i = int(i)
j = int(j)
当然,代码并不像使用C的 scanf 或C ++的 cin 的单行一样优雅。 Python代码看起来更接近于Java(它使用了与C,C ++或Python完全不同的机制),因此每个变量都需要单独处理。
在Python中, raw_input 函数从控制台中取出字符,并将它们连接成一个 String 作为输出。如果在赋值运算符的左侧只找到一个变量,拆分函数会将此字符串分解为列表 < strong>字符串值。
在我们的情况下,我们期望两个变量,我们可以使用逗号分隔的标识符列表来获取值。然后将字符串值分配给列出的变量。如果我们想对这些值进行算术运算,我们需要使用Python内置的 int >来将它们转换为数字 int (或 float )数据类型strong>或浮动功能。
我知道这个帖子是对一个非常古老的帖子的回复,并且可能知识已经在那里作为“常识”一段时间了。但是,我会赞赏这样的帖子,而不是我不得不花费几个小时的搜索和黑客,直到我想出了我认为可以在CS1教室中呈现的最优雅的解决方案。
答案 3 :(得分:1)
首先将整行读入类似
的字符串 string = raw_input()
然后像这样使用for循环
prev = 0
lst = []
index = 0
for letter in string :
if item == ' ' or item == '\n' :
lst.append(int(string[prev:index])
prev = index + 1
此循环将整行作为字符串的输入并单独处理其中的部分,然后将数字附加到列表中 - 将它们转换为整数后。
答案 4 :(得分:1)
您也可以将此方法用于任意数量的输入。对于由空格分隔的三个输入,请考虑以下内容:
import sys
S = sys.stdin.read()
S = S.split()
S = [int(i) for i in S]
l = S[0]
r = S[1]
k = S[2]
答案 5 :(得分:0)
或者你可以这样做
input_user=map(int,raw_input().strip().split(" "))
答案 6 :(得分:0)
你可以在python 3.6.1
中使用它读取2个int值n,m = map(int,input().strip().split(" "))
答案 7 :(得分:0)
您可以使用此方法在一行中进行输入
a, b = map(int,input().split())
请记住,您可以在此语句的LHS中使用任意数量的变量。
要将输入作为字符串,请使用 str 而不是 int
并以列表作为输入
a = list(map(int,input.split()))
答案 8 :(得分:0)
在 python 3.9 中,使用 a, b = map(int,input().split()) 因为你会得到 raw_input() 未定义