如何在不定义任何限制的情况下在 python 中获取任意数量的输入?

Posted

技术标签:

【中文标题】如何在不定义任何限制的情况下在 python 中获取任意数量的输入?【英文标题】:How to take any number of inputs in python without defining any limit? 【发布时间】:2015-10-14 02:29:49 【问题描述】:

现在,问题是我应该从用户那里获取未知数量的输入,比如在一次运行中他可以输入 10 个术语,在另一次运行中他可以输入 40。而且我最初不能要求用户输入n 这样我就可以运行范围循环并开始将输入存储在列表中。如果我能以某种方式做到这一点,那么我已经创建了循环,但事实并非如此。那么,问题是如何为用户定义端点?或者如何将未知数量的参数传递给函数?

def fibi(n):
    while n<0 or n>=50:
        print "Enter value of n greater than 0 but less than 50"
        n = int(raw_input())
    if n==0:
        return n
    else:
        a, b = 0, 1
        for i in range(n):
            a, b = b, a + b
    return a

主调用函数开始

n =[]
????
//This loop is for calling fibi function and printing its output on each diff line
for i in n:
    print (fibi(n[i]))

示例输入:每个条目都应该在一个新行上

1
2
3
4
5
.
.
.
n

样本输出

1
1
2
3
5

【问题讨论】:

*args 和 **kwargs pythontips.com/2013/08/04/args-and-kwargs-in-python-explained 你不能在每次输入后询问用户是否想提供更多输入吗? 通常,在这些情况下,您要么在每次输入后询问用户是否有更多输入,要么定义一个特殊的输入来标记列表的结尾。 @JulianBerger 对于许多输入,这可能会变得乏味;我建议在特殊字符或无输入时退出循环。 通常最好在命令行上指定这些参数,而不是在每次迭代时询问用户新参数。例如,python myprog.py 1 2 3 4 5 6 7 比嵌入在输出中的问题要清晰得多。然后你可以在这里使用其他的 sys.argv cmets。 【参考方案1】:

这是从用户读取许多整数输入的方法:

inputs = []
while True:
    inp = raw_input()
    if inp == "":
        break
    inputs.append(int(inp))

如果你想传递未知数量的参数给函数,你可以使用 *args:

def function(*args):
    print args
function(1, 2, 3)

这将打印(1, 2, 3)

或者你可以只使用列表来达到这个目的:

def function(numbers):
    ...
function([1, 2, 3])

【讨论】:

@hannes-karppila :它工作得非常好,但是你在第一个代码块 ===> 上遗漏了一些东西,它读取“inputs.append(int())”它应该是输入。追加(int(inp)) 如何在python3中做到这一点? @Tojrah 将 raw_input 替换为 input 我做了同样的事情,但我得到了运行时错误【参考方案2】:
from sys import stdin 
lines = stdin.read().splitlines()
print(lines)

输入

0
1
5
12
22
1424
..
...

输出

['0', '1', '5', '12', '22', '1424' .. ...]

【讨论】:

请解释您的答案,以帮助现在和将来的其他人了解您的代码如何以及为什么工作。【参考方案3】:

在大多数情况下,抛出的错误是“EOFError : EOF while reading a line

如果我们处理这个错误,我们的工作就完成了!

while True:
    try:
        var = input()
        # do your task 

    except EOF as e:
        pass

【讨论】:

【参考方案4】:

我猜n 是一个作为命令行参数传递的列表,如果是这样,那么你可以尝试这样做

import sys

noOfArgs = len(sys.argv)
n = sys.argv

这是一个link,它展示了如何解析命令行参数。

【讨论】:

【参考方案5】:
l=[]
while(True):
        try:
            a=input()
        except Exception as e:
            break
        l.append(int(a))
print(*l)

【讨论】:

【参考方案6】:

我猜这就是你要找的东西

inputs = []
while True:
    sval = input("Enter a number: ")
    if sval == 'done' :
        break
    try:
        fval = float(sval)
    except:
        print('Invalid input')
        continue
    try:
        inputs.append(int(sval))
    except:
        inputs.append(float(sval))
print(inputs)

【讨论】:

【参考方案7】:

argv 是传递给脚本的输入列表。第一个参数argv[1] 是脚本的名称。之后的内容可以被视为传递给脚本的参数。您可以简单地使用下面的脚本来获取输入并将它们存储在一个列表中。

import sys
inputs = []
for item in sys.argv[1:]:
    inputs.append(item)
print(inputs)

【讨论】:

【参考方案8】:

我认为处理此问题的最佳方法是使用错误处理,即tryexcept 块,请参阅下面的代码。

while True:
try:
    n = input()
    
    # Your Logic or code
    
except:
    break

【讨论】:

以上是关于如何在不定义任何限制的情况下在 python 中获取任意数量的输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不打开任何对话框的情况下在 Facebook 上发布消息?

如何在没有手动限制的情况下在一侧扩展 ggplot 条形刻度而不是另一侧

如何在不使用任何库的情况下在颤振中使用 bloc

如何在不使用转储的情况下在 python 中编写 json 文件

如何在不传递引用的情况下在 Python 中使用 SyncManager 跨进程共享列表

如何在不使用临时文件的情况下在 python 的 tarfile 中写入大量数据