【问题标题】:Integer Array Input in Python 2Python 2 中的整数数组输入
【发布时间】:2015-02-24 19:44:46
【问题描述】:

我是 python 新手。我想获取 2 个大小为 4 的整数数组 a 和 b 的用户输入并打印它们。 输入应该是空格分隔的。

第一个用户应该像这样输入数组 a[]:

1 2 3 4

他应该像这样输入数组b[]

2 3 4 6

程序应该显示 a 和 b 作为输出。我希望 a 和 b 中的变量是整数而不是字符串。我该怎么做?

我正在尝试这样的事情

 a=[]
 b=[]
 for i in range(0,4):
         m=raw_input()
         a.append(m)
 for i in range(0,4):
         n=int(raw_input())
         b.append(n)

 print a
 print b

但这不起作用。

【问题讨论】:

    标签: python arrays input integer


    【解决方案1】:

    raw_input 读取一行并将其作为字符串返回。

    如果你想在空格上分割线,一个解决方案是

    a = raw_input().split()
    b = raw_input().split()
    

    请注意,它们将是 字符串 的数组,而不是整数。 如果您希望它们是整数,则需要使用

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

    或者,更明确地说

    a = []
    for x in raw_input().split():
        a.append(int(x))
    b = []
    for x in raw_input().split():
        b.append(int(x))
    

    Python 交互式 shell 是试验其工作原理的好方法...

    Python 2.7.8 (default, Sep 24 2014, 18:26:21) 
    [GCC 4.9.1 20140903 (prerelease)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> "19 22 3 91".split()                                                        
    ['19', '22', '3', '91']
    >>> map(int, "19 22 3 71".split())                                              
    [19, 22, 3, 71]
    >>> _
    

    【讨论】:

    • 谢谢先生的回答。你能告诉我我应该把“for i in range(0,4):”放在哪里,以便从用户那里获取 4 个空格分隔的输入值,以及哪些部分应该包含在循环中
    • @user220789: str.split() 已经在内部执行了所需的循环并返回包含空格分隔部分的列表;所以raw_input.split() 已经是一个列表(但它是一个子字符串列表,而不是一个整数列表)。
    • 所以基本上这里发生的情况是,在我输入后按回车键后,新循环“for x in raw_input().split(): b.append(int(x))”开始了吗?所以根据我的理解,这里没有检查数组大小的上限,我可以为 a 输入任意数量的整数。只有当我点击 enter 新列表 b 才开始。
    • @user220789:点击空格时什么也没有发生。 Python raw_input 总是等待你输入回车,然后返回一个包含你输入的内容(包括空格)的字符串:总是一个单一的字符串,例如"1 2 3 4"。在该字符串上调用split() 会返回["1", "2", "3", "4"],即字符串列表,然后您需要将它们转换为整数。这可以使用map(int, ...) 紧凑地完成,或者像我展示的两个循环中那样明确地完成。
    • 这是一个错字,先生,我的意思是只输入。我现在已经更正了我的评论。谢谢您的帮助,先生。
    【解决方案2】:

    raw_input()从用户那里读取一行,该行需要用空格分割

    a = raw_input().split()
    b = raw_input().split()
    

    接下来,您需要将数据转换为int 最简单的方法是列表理解

    a = [int(x) for x in a]
    b = [int(x) for x in b]
    

    【讨论】:

      【解决方案3】:

      您的程序运行良好。您只是没有通过prompt string,它会在终端上提示询问用户的输入:

      a=[]
      b=[]
      for i in range(0,4):
          m=int(raw_input(" Enter value for a list :"))
          a.append(m)
      for i in range(0,4):
          n=int(raw_input(" Enter value for b list :"))
          b.append(n)
      
      print "list a looks like :-", a
      print "list b looks like :-", b
      

      结果如下:

       Enter value for a list :1
       Enter value for a list :2
       Enter value for a list :3
       Enter value for a list :4
       Enter value for b list :5
       Enter value for b list :6
       Enter value for b list :7
       Enter value for b list :8
      list a looks like :- [1, 2, 3, 4]
      list b looks like :- [5, 6, 7, 8]
      

      raw_input(...)
          raw_input([prompt]) -> string
      
          Read a string from standard input.  The trailing newline is stripped.
          If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
          On Unix, GNU readline is used if enabled.  The prompt string, if given,
          is printed without a trailing newline before reading.
      

      如果您只希望 integers 作为输入,您可以使用 input 内置函数,无需再次将其类型转换为整数。

      a=[]
      b=[]
      for i in range(0,4):
          m = input(" Enter value for a list :")
          a.append(m)
      for i in range(0,4):
          n = input(" Enter value for b list :")
          b.append(n)
      


      input(...)
          input([prompt]) -> value
      
      Equivalent to eval(raw_input(prompt)).
      

      【讨论】:

        【解决方案4】:

        根据您的描述,我会编写类似...的代码

        def foo():
            a = raw_input()
            a = a.split()
            a = [int(x) for x in a]
            if len(a) != 4:
                    raise Exception("error: input 4 integers")
            b = raw_input()
            b = b.split()
            b = [int(x) for x in b]
            if len(b) != 4:
                    raise Exception("error: input 4 integers")
            print a
            print b
        

        【讨论】:

          【解决方案5】:

          您可以使用 python 的 sys 模块从命令行读取输入。

          import sys;
          a = map(int, sys.stdin.readline().split());
          b = map(int, sys.stdin.readline().split());
          print a;
          print b;
          

          【讨论】:

          • 如果你使用 python 3,你需要做 -> a = list(map(int, sys.stdin.readline().split())); b = list(map(int, sys.stdin.readline().split()));
          【解决方案6】:

          这里有完整的示例代码

          n=int(raw_input())
          a=map(int,raw_input().split())
          m=0
          for i in range(n):
              print a[i]
          

          输入

          6

          2 3 9 10 12 15

          输出

          2

          3

          9

          10

          12

          15

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-11
            相关资源
            最近更新 更多