【问题标题】:Two values from one input in python?python中一个输入的两个值?
【发布时间】:2009-06-07 05:27:53
【问题描述】:

这是一个简单的问题,我不想在这里问,但我似乎无法在其他任何地方找到答案:是否可以在一行 Python 中从用户那里获取多个值?

例如,在 C 语言中,我可以这样做:scanf("%d %d", &var1, &var2)。但是,我无法弄清楚与之对应的 Python 是什么。我认为它只是类似于var1, var2 = input("Enter two numbers here: "),但这不起作用,我没有抱怨,因为如果这样做就没有多大意义。

有没有人知道优雅而简洁地做到这一点的好方法?

【问题讨论】:

标签: python variables input


【解决方案1】:

Python 的映射方式

printf("Enter two numbers here: ");
scanf("%d %d", &var1, &var2)

应该是

var1, var2 = raw_input("Enter two numbers here: ").split()

请注意,我们不必显式指定split(' '),因为split() 默认使用任何空白字符作为分隔符。这意味着如果我们简单地调用split(),那么用户可以使用制表符分隔数字,如果他真的想要的话,也可以使用空格。

Python 具有动态类型,因此无需指定%d。但是,如果您运行上述代码,则 var1var2 将都是字符串。您可以使用另一行将它们转换为int

var1, var2 = [int(var1), int(var2)]

或者你可以使用列表理解

var1, var2 = [int(x) for x in [var1, var2]]

总而言之,你可以用这个单线完成整个事情:

# Python 3
var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]

# Python 2
var1, var2 = [int(x) for x in raw_input("Enter two numbers here: ").split()]

【讨论】:

    【解决方案2】:

    你不能真的用 C 的方式来做(我认为),但是这样做的 Pythonic 方式是(如果你的“输入”在它们之间有空格):

    raw_answer = raw_input()
    answers = raw_answer.split(' ') # list of 'answers'
    

    所以你可以重写你的尝试:

    var1, var2 = raw_input("enter two numbers:").split(' ')
    

    请注意,这比使用“第一个”解决方案的灵活性稍差(例如,如果您在末尾添加一个空格,这已经中断了)。

    还要注意 var1 和 var2 在不强制转换为 int 时仍将是使用此方法的字符串。

    【讨论】:

      【解决方案3】:

      Python 2.* 中,input 允许用户输入任何表达式,例如一个元组:

      >>> a, b = input('Two numbers please (with a comma in between): ')
      Two numbers please (with a comma in between): 23, 45
      >>> print a, b
      23 45
      

      Python 3.* 中,input 类似于2.*raw_input,返回一个用户输入的字符串(而不是eval 将它作为2.* 过去在@987654330 上执行的操作) @),所以你必须.split,和/或eval,&c,但你也可以更好地控制整个事情。

      【讨论】:

      • 哦,不。请永远不要这样做:input() 允许任意代码执行。只需在输入提示符处输入exit('pwned!'),看看会发生什么。
      • @9000 我遇到了ValueError 异常。那很完美。所以这不是你的意思有害的东西。所以现在不用担心使用input()
      【解决方案4】:

      如果你需要在 python 中取两个整数,比如 a,b,你可以使用 map 函数。
      假设输入是,

      1 5 3 1 2 3 4 5

      其中 1 表示测试用例,5 表示值的数量,3 表示任务值,在下一行给定 5 个值,我们可以在 PYTH 2.x 版本中使用此方法获取此类输入。

      testCases=int(raw_input())
      number, taskValue = map(int, raw_input().split())
      array = map(int, raw_input().split())
      

      您可以将 map() 中的 'int' 替换为所需的另一种数据类型。

      【讨论】:

        【解决方案5】:

        您必须使用split() 方法将输入分成两个不同的输入。无论您传递到拆分中的什么,都会查找并从那里拆分输入。在大多数情况下,它是空白。

        例如,您输入23 24 25。您期望 3 种不同的输入,例如

        num1 = 23
        num2 = 24
        num3 = 25
        

        所以在 Python 中,你可以这样做

        num1,num2,num3 = input().split(" ")
        

        【讨论】:

          【解决方案6】:

          所有输入都将通过一个字符串。收到该字符串后,由您自行处理。除非是这样,否则您使用 eval(input()) 方法,但无论如何都不建议在大多数情况下这样做。

          input_string = raw_input("Enter 2 numbers here: ")
          a, b = split_string_into_numbers(input_string)
          do_stuff(a, b)
          

          【讨论】:

            【解决方案7】:

            我找到的解决方法如下:


            要求用户输入两个用逗号或其他字符分隔的数字

            value = input("Enter 2 numbers (separated by a comma): ")

            然后,字符串被拆分:n 取第一个值,m 取第二个值

            n,m = value.split(',')

            最后,要将它们用作整数,需要对其进行转换

            n, m = int(n), int(m)


            【讨论】:

              【解决方案8】:

              检查这个方便的功能:

              def gets(*types):
                  return tuple([types[i](val) for i, val in enumerate(raw_input().split(' '))])
              
              # usage:
              a, b, c = gets(int, float, str)
              

              【讨论】:

              • 不需要索引访问! return tuple(parser(value) for (parser, value) in zip(types, raw_input(prompt).split(' '))).
              【解决方案9】:

              对于n 的输入数,将变量声明为空列表并使用相同的语法继续:

              >>> x=input('Enter value of a and b').split(",")
              Enter value of a and b
              1,2,3,4
              >>> x
              ['1', '2', '3', '4']
              

              【讨论】:

                【解决方案10】:

                你可以这样做

                a, b = map(int, input().split())
                

                a, b = input().split()
                print(int(a))
                

                MyList = list(map(int, input().split()))
                a = MyList[0]
                b = MyList[1]
                

                【讨论】:

                  【解决方案11】:

                  我为自己找到的最简单的方法是使用带有输入的拆分功能 就像你有两个变量 a,b

                  a,b=input("Enter two numbers").split()
                  

                  就是这样。 还有一种方法(显式方法) 例如- 你想输入三个值

                  value=input("Enter the line")
                  a,b,c=value.split()
                  

                  简单..

                  【讨论】:

                    【解决方案12】:

                    这是一个示例代码,将两个输入通过 split 命令和分隔符分隔为“,”


                    >>> var1, var2 = input("enter two numbers:").split(',')
                    >>>enter two numbers:2,3
                    >>> var1
                    '2'
                    >>> var2
                    '3'


                    可以使用的其他分隔符变体如下:
                    var1, var2 = input("enter two numbers:").split(',')
                    var1, var2 = input("enter two numbers:").split(';')
                    var1, var2 = input("enter two numbers:").split('/')
                    var1, var2 = input("enter two numbers:").split(' ')
                    var1, var2 = input("enter two numbers:").split('~')

                    【讨论】:

                      【解决方案13】:

                      用空格分隔的两个输入:

                      x,y=input().split()
                      

                      【讨论】:

                        【解决方案14】:
                        a,b=[int(x) for x in input().split()]
                        print(a,b)
                        

                        输出

                        10 8

                        10 8

                        【讨论】:

                          【解决方案15】:

                          在 Python 3 中,raw_input() 被重命名为 input()

                          input([prompt])
                          

                          如果提示参数存在,则将其写入标准输出 没有尾随换行符。然后该函数从输入中读取一行, 将其转换为字符串(去除尾随的换行符),并返回 那。读取 EOF 时,会引发 EOFError。

                          所以你可以这样做

                          x, y = input('Enter two numbers separating by a space: ').split();
                          print(int(x) + int(y))
                          

                          如果您不使用空格放置两个数字,您将获得ValueError 异常。所以这很好。

                          注意如果您需要 input() 的旧行为,请使用 eval(input())

                          【讨论】:

                            【解决方案16】:

                            我在 Python 3 中尝试过,似乎工作正常。

                            a, b = map(int,input().split())
                            
                            print(a)
                            
                            print(b)
                            

                            输入:3 44

                            输出:

                            3

                            44

                            【讨论】:

                              【解决方案17】:

                              此解决方案用于将多个字符串(如 ("22 44 112 2 34"))转换为整数列表,您可以访问列表中的值。

                              n = input("") # Like : "22 343 455 54445 22332"
                              
                              if n[:-1] != " ":
                              n += " "
                              
                              char = ""
                              list = []
                              
                              for i in n :
                                  if i != " ":
                                      char += i
                                  elif i == " ":
                                      list.append(int(char))
                                      char = ""
                              
                              print(list) # Be happy :))))
                              

                              【讨论】:

                                【解决方案18】:

                                如果我们想在一行中输入两个输入,代码如下

                                x, y = input().split(" ")
                                
                                print(x, y)
                                

                                在输入值时,由于.split(" ") 调用,我们必须在它们之间用空格分隔它们。

                                但这些值的类型为str。如果我们要执行一些算术运算,我们必须将xy的类型转换为:int(x), int(y)

                                我们也可以借助 python 中的listmap 来做到这一点。

                                list1 = list(map(int, input().split()))
                                print(list1)
                                

                                这个列表给出了int类型的元素。

                                【讨论】:

                                  【解决方案19】:

                                  简而言之,使用列表推导和 split()

                                  Python 3:

                                  var1, var2 = [int(num) for num in input("Enter two numbers separated by space: ").split()]

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2020-02-22
                                    • 2015-06-12
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多