【问题标题】:Python 3.5.1 - read multiple integers on the same input line into a listPython 3.5.1 - 将多个输入读入一个数组
【发布时间】:2016-05-17 14:09:37
【问题描述】:

我正在使用 python 3.5.1 并通过 Windows 上的命令提示符运行我的文件。程序运行后传递参数;即程序根据先前生成的列表提示输入。

我希望在以空格分隔的同一行上读取多个数字。 Python 2.X 使用 raw_input 不会有问题,但事实证明这是一个挑战。

selection = list(map(int,input("Enter items to archive (1 2 etc):").split(",")))

如果我在同一行输入两个不同的数字:

输入要归档的项目(1 2 等):29 30 Traceback(最近一次调用 最后):文件“G:\Learning\Python\need_to_watch.py​​”,第 15 行,在 selection = list(map(int,input("Enter items to archive (1 2 etc):").split(","))) File "", line 1 29 30 ^ SyntaxError: 解析时出现意外 EOF

我放弃了一行并尝试在循环中执行它,但我得到一个不同的错误

data=[]
while True:
        entry = int(input('Item number : '))
        data.append(entry)
        if entry == 'q':
            break

它尝试将 'q' 作为一个变量来评估,即使我没有 eval()'d 任何东西。

这个问题说只使用 input().split() 但看起来这不再有效.... accepting multiple user inputs separated by a space in python and append them to a list

我可以尝试捕获 EOF 异常,但这似乎不是正确的方法,也没有必要。

【问题讨论】:

    标签: python python-3.x python-3.5


    【解决方案1】:

    您尝试将所有内容评估为int,这显然是行不通的。试试这个:

    data = []
    
    while True:
        entry = input('Item number : ')
        if entry == 'q':
            break
    
        try:
            data.append(int(entry))
        except:
            print("Not a valid number")
    

    【讨论】:

    • 您可以使用isdigit(),而不是try/exceptif entry.is_digit(): data.append(q)elif entry == 'q': break
    【解决方案2】:
    entry = input('Enter items: ')
    entry = entry.split(' ')
    entry = list(map(int, entry))
    print(entry)
    

    或者更简洁:

    entry = list(map(int, input('Enter items: ').split(' ')))
    print(entry)
    

    【讨论】:

    • 这是大家推荐的常见答案,我已经尝试过了(见OP)。输入两个数字后,它给了我:“SyntaxError: unexpected EOF while parsing”如果我使用解释器,这有效,但如果我从 .py 文件运行它,则无效。
    • 究竟是什么输入不适合您?
    • 如果我输入不带引号的“1 2”,我会收到 EOF 错误。如果我输入不带引号的“1 2 3”,我会收到无效的语法错误。它只是不喜欢在解释器中运行时的空格。
    • 我在控制台中使用python filename.py 运行它,它适用于给定的输入。
    • 在文件名前面加上“python”现在也可以工作了。它使用的是 2.7 的解释器而不是 3.5。谢谢!
    【解决方案3】:

    如果您想将参数传递给 python 脚本,您可能需要查看 argparse:https://docs.python.org/3/library/argparse.html

    import argparse
    
    parser = argparse.ArgumentParser() 
    parser.add_argument('integers', type=int, nargs='+')
    
    args = parser.parse_args()
    print(args.integers)
    
    python script.py 1 2 3 4
    [1, 2, 3, 4]
    

    【讨论】:

    • 我在程序内部传递参数。它扫描一个目录以查找匹配细节的文件并将它们全部打印出来 1-###。然后它会提示用户输入要执行操作的数字。在示例中,我想告诉程序对条目 29 和 30 执行某些操作。
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 2018-09-26
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多