代码之家  ›  专栏  ›  技术社区  ›  Alterlife

用python在一行中读取两个变量

  •  10
  • Alterlife  · 技术社区  · 15 年前

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

    我在找相当于:

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

    我能做到这一点的一个方法是 raw_input() 然后 split 输入的内容。有更优雅的方式吗?

    这不是现场使用。只是为了学习……

    7 回复  |  直到 7 年前
        1
  •  28
  •   John La Rooy    15 年前

    不,通常的方法是 raw_input().split()

    在您的情况下,您可以使用 map(int, raw_input().split()) 如果希望它们是整数而不是字符串

    不要使用 input() 为此。考虑如果用户输入

    import os;os.system('do something bad')

        2
  •  9
  •   MAK    15 年前

    也可以从sys.stdin中读取

    import sys
    
    a,b = map(int,sys.stdin.readline().split())
    
        3
  •  5
  •   Professor Richard    10 年前

    我也是这方面的新手。在python.org网站上做了一些研究,并进行了一些黑客攻击,以使其正常工作。这个 罗氏输入 函数再次返回,更改自 输入 .这就是我想到的:

    i,j = raw_input("Enter two values:  ").split
    i = int(i)
    j = int(j)
    

    当然,代码并不像使用C的一行程序那样优雅。 斯坎夫 或者C++的 CIN . Python代码看起来更接近Java(它使用了与C、C++或Python完全不同的机制),使得每个变量都需要单独处理。

    在Python中 罗氏输入 函数从控制台获取字符并将它们连接到一个 作为其输出。当在赋值运算符的左侧仅找到一个变量时, 分裂 函数打破了这个 变成一个 列表 属于 价值观。

    在我们的例子中,我们期望有两个变量,我们可以使用一个逗号分隔的列表来为它们的标识符获取值。 然后将值分配到列出的变量中。如果我们想用这些值做算术,我们需要把它们转换成数字 利息 (或) 浮动 )使用python内置的数据类型 int 浮动 功能。

    我知道这篇文章是对一篇非常老的文章的回复,可能知识已经作为“常识”存在了一段时间。但是,我会很欣赏这样的帖子,而不是花几个小时搜索和黑客攻击,直到我找到了我认为最优雅的解决方案,可以在CS1课堂上展示。

        4
  •  1
  •   Pinkoo    10 年前

    首先把整行读成一个字符串

        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
    

    这个循环接受一整行作为字符串的输入,并分别处理其中的部分,然后在将它们转换为整数后将数字附加到list-lst。

        5
  •  1
  •   Bart Van Loon    7 年前

    您还可以将此方法用于任何数量的输入。对于用空格分隔的三个输入,请考虑以下内容:

    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]
    
        6
  •  0
  •   Tunaki    9 年前

    或者你可以这样做

    input_user=map(int,raw_input().strip().split(" "))
    
        7
  •  0
  •   saigopi.me    7 年前

    在python 3.6.1中使用它可以读取2个int值。

    n,m = map(int,input().strip().split(" "))