如何在Python中使用.split为变量分配未知数量的数字输入?

问题描述 投票:1回答:4

我的任务是创建一个程序,计算从1-100开始的数字。

我现在遇到的问题是使用.split将每个输入分配给一个变量,但是只要它超过10,用户就可以输入多少个数字。我很确定我需要使用一个某种类型的清单,但我的知识是有限的,并希望得到一些指导!

numberList = input("Enter 1 to 100 ")

Check = numberList.replace(" ","")

python python-3.x
4个回答
0
投票

编写一个循环,连续解析输入并将识别的数字添加到列表中,直到该列表至少有10个数字。

numbers = []
while True:
    n = 10 - len(numbers)
    if n <= 0:
        break
    s = input("Enter at least {} more numbers: ".format(n))
    for v in s.split(" "):
        try:
            v = int(v)
        except ValueError:
            continue
        numbers.append(v)

0
投票

因此,如果用户输入错误,您需要创建一个整数列表并打印错误。遵循“请求宽恕比获得许可更容易”的原则。也就是说,只需尝试将数字转换为整数,如果某些内容失败则中止任务。例如:

while True:
    userInput = input("Enter at least 10 integers between 1 and 100: ")
    try:
        numberList = [int(substring) for substring in userInput.split(" ")]
        if len(numberList) < 10:
            print("Enter at least 10 numbers")
        else:
            break
    except ValueError:
        print("You entered a non-numeric character; please try again")

最后,您想要计算每个数字的出现次数。最好的方法(在我看来)是Counter系列。有了这个,你只需要做以下事情

from collections import Counter
counter = Counter(numberList)

0
投票

分割输入,从我猜测你的问题看起来像'1 2 45 12',只需使用.split(' '),正如其他人已经指出的那样。这将为您提供值的列表,但是以字符串格式。要将它们转换为整数,可以使用map,它将对列表的每个元素应用一个操作并返回一个迭代器,该迭代器可以转换为新的列表:

numberList = list(map(int, numberList))

如果该列表中的某个元素无法转换为整数,则会引发ValueError异常。使用try... except捕获它以打印您的错误消息。

对于第二部分,我将简单地遍历列表中的所有项目,使用list.count(item)info)将返回该项目的出现次数,并将已经检查过的每个项目存储在单独的列表中以避免双重 - 检查任何。

码:

numberList = input("Enter at least 10 integers between 1 and 100: ").split(' ')
if len(numberList) < 10:
    numberList.extend(input("Enter at least {} more integers between 1 and 100: ".format(10-len(numberList))).split(' '))

try:
    numberList = list(map(int, numberList))
except ValueError:
    print("You entered a non-numeric character; please try again!")

print("You have entered {} integers.".format(len(numberList)))

checked_list = []

for i in numberList:
    if i not in checked_list:
        print("The integer {} occured {} time(s).".format(i, numberList.count(i)))
        checked_list.append(i)

输出:

Enter at least 10 integers between 1 and 100: 1 2 3 4 5 6 7
Enter at least 3 more integers between 1 and 100: 8 1 2
You have entered 10 integers.
The integer 1 occured 2 time(s).
The integer 2 occured 2 time(s).
The integer 3 occured 1 time(s).
The integer 4 occured 1 time(s).
The integer 5 occured 1 time(s).
The integer 6 occured 1 time(s).
The integer 7 occured 1 time(s).
The integer 8 occured 1 time(s).

0
投票

你可以这样做:

numberList = input("Enter at least 10 integers between 1 and 100: ").split(" ")

if len(numberList) < 10:
    print("Enter at least 10 integers between 1 and 100: ")

要计算每个数字出现的次数:

from collections import Counter

count = Counter(numberList) # eg count = [1,4,9,7,1]
for k,v in count.items():
    print(str(k) + " appears " + str(v) + " times")
© www.soinside.com 2019 - 2024. All rights reserved.