确保列表中的多个用户输入是while循环Python 3中的整数

时间:2018-02-14 00:05:56

标签: python python-3.x

以下代码按预期工作。我想确保输入的所有数据都是整数。非整数应该得到错误消息。我的while循环适用于第一个输入,其中询问用户输入的数字#。 但是,它不会捕获后续输入的错误。

while True:
    try:
        userIn = int(input("Input no of numbers :"))     

        userNums = []
        uNums = []

        print("Type " + str(userIn) + " numbers in list :")          

        for index in range(int(userIn)):
            userNums.append(input("entry" + str(index+1) +" = "))

        for number in userNums:
            if number not in uNums:
                uNums.append(number)

        print("unique number counted")    
        for uNum in uNums:       
            print(str(uNum) + " count is " + str(userNums.count(uNum)) + "times")     
        break
    except:
        print("Error. only ints allowed")

4 个答案:

答案 0 :(得分:1)

您实际上并没有尝试在任何时候转换为整数。下面只保存字符串。

for index in range(int(userIn)):
        userNums.append(input("entry" + str(index+1) +" = "))

顺便说一下,你可以摆脱以下几点:

for number in userNums:
    if number not in uNums:
        uNums.append(number)

如果您设置userNum一套 - userNum = set() - 其中只能包含唯一值。

答案 1 :(得分:1)

你的主要错误是遗忘的int():

for index in range(userIn):
    num = int(input("entry" + str(index+1) +" = "))
    userNums.append(num)

但是,如果输入错误,整个程序仍然需要重新启动,因此我建议尝试一下,除非有需要。你也倾向于:

1.无需转换变量
2.使用+str(),这可能不是最好的习惯

此代码应该是直接的,并且定制的INPUT功能在将来可能会有用:)

def INPUT(InputText):
    """customized input handling"""
    while True:
        try:
            return int(input(InputText))
        except ValueError:
            print ("Error: Only integers accepted")


#note: you could wrap the code below in a function 
#      and call the function afterwards if you want:

userIn = INPUT("Input no of numbers :")
userNums = []
uNums = []

print("Type {} numbers in list :".format(userIn))

for index in range(userIn):
    num = INPUT("entry {} = ".format(index+1))
    userNums.append(num)

for number in userNums:
    if number not in uNums:
        uNums.append(number)

print("unique number counted")

for uNum in uNums:
    print("{} count is {} times".format(uNum,userNums.count(uNum)))

答案 2 :(得分:0)

您没有将后续输入转换为int()。

你需要像

这样的东西
userNums.append(int(input("entry" + str(index+1) +" = ")))

答案 3 :(得分:0)

以下解决方案应该有效。主要变化:

(1)添加了明确的ValueError检查,因为这是一种很好的做法 (2)添加了明确的continue,因为这也是一种很好的做法 (3)合并else条款以创建try / except / else结构。
(4)将try / except添加到数字输入代码的循环中 (5)使用set获取列表的唯一项目。

while True:

    try:
        userIn = int(input("Input no of numbers :"))

    except ValueError:
        print("Error: only ints allowed")
        continue

    else:

        userNums = []

        print("Type " + str(userIn) + " numbers in list :")          

        for index in range(int(userIn)):
            while True:
                try:
                    x = int(input("entry" + str(index+1) +" = "))
                    userNums.append(x)
                    break
                except ValueError:
                    print("Error: only ints allowed")
                    continue

        uNums = set(userNums)

        print("Unique numbers counted:")

        for uNum in uNums:       
            print(str(uNum) + " count is " + str(userNums.count(uNum)) + " times")

        break