使用Python在一行中读取两个变量

时间:2009-10-19 11:00:21

标签: python input

我熟悉input()函数,从用户输入读取单个变量。是否有类似的简单方法来读取两个变量?

我正在寻找相当于:

scanf("%d%d", &i, &j); // accepts "10 20\n"

我能够实现此目的的一种方法是使用raw_input()然后使用split输入的内容。有更优雅的方式吗?

这不适合现场使用。只是为了学习..

9 个答案:

答案 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() 未定义