If оператор error: ValueError: недопустимый литерал для int() с базой 10: » и out of order int()

Мой код выглядит следующим образом:

allnums = []
odds = []
evens = []

number = 0

while True:
    number = input("Enter a number or type 'done':")

    if number.lower() == 'done':
        print("=============================")
        print("Your even numbers are", str(evens))
        print("Your odds numbers are", str(odds))
        print("=============================")
        print("Your smallest number is '"+str(allnums[0])+"'")
        break
    if int(number) % 2 == 0:
        evens.append(number)
        evens.sort()
        allnums.append(number)
        allnums.sort()       
    if int(number) % 2 != 0:
        odds.append(number)
        odds.sort()
        allnums.append(number)
        allnums.sort()
    else:
        print("Invalid input")

Я пытаюсь создать программу, которая читает список чисел и определяет наименьшее значение, а также предлагает список четных и нечетных чисел. Я сталкиваюсь с двумя проблемами с моим кодом, где наименьшее число не часто правильно, например:

Enter a number or type 'done':33
Enter a number or type 'done':4
Invalid input
Enter a number or type 'done':6
Invalid input
Enter a number or type 'done':4
Invalid input
Enter a number or type 'done':6
Invalid input
Enter a number or type 'done':7
Enter a number or type 'done':44
Invalid input
Enter a number or type 'done':88
Invalid input
Enter a number or type 'done':done
=============================
Your even numbers are ['4', '4', '44', '6', '6', '88']
Your odds numbers are ['33', '7']
=============================
Your smallest number is '33'

Я также получаю следующую ошибку, когда я использую только пробел (‘ ‘ ) в качестве ответа, который я хотел бы написать ответ печати («недопустимый ввод») на что-то, что не является числом или сделано, но всегда приводит к:

Traceback (most recent call last):
  File "XXXX", line 17, in <module>
    if int(number) % 2 == 0:
ValueError: invalid literal for int() with base 10: ' '

Я знаю, что это в основном связано с порядком событий, но что я упускаю?

4 ответа

  1. Сообщение об ошибке довольно ясно: numberсодержит пробел, который не может быть проанализирован в целое число. Если вы хотите пометить такой ввод как недопустимый, вы должны протестировать его, прежде чем пытаться преобразовать его в целое число (или поймать ошибку, которая при этом генерирует).

  2. allnums = []
    odds = []
    evens = []
    
    number = 0
    
    while True:
        try:
            number = input("Enter a number or type 'done':")
    
            if number.lower() == 'done':
                print("=============================")
                print("Your even numbers are", str(sorted(evens)))
                print("Your odds numbers are", str(sorted(odds)))
                print("=============================")
                print("Your smallest number is '"+str(sorted(allnums)[0])+"'")
                break
            elif int(number) % 2 == 0:
                evens.append(number)
                #evens.sort()
                allnums.append(number)
                #allnums.sort()       
            elif int(number) % 2 != 0:
                odds.append(number)
                #odds.sort()
                allnums.append(number)
                #allnums.sort()
            pass
    
        except:
            print("Invalid input")
        pass
    

    вы уверены, что это мой выход

    deathnote@deathnote:~/Desktop/d$ python3 code.py 
    Enter a number or type 'done':12
    Enter a number or type 'done': 
    Invalid input
    Enter a number or type 'done': 
    Invalid input
    Enter a number or type 'done':qwe
    Invalid input
    Enter a number or type 'done':
    Invalid input
    Enter a number or type 'done':wqew
    Invalid input
    Enter a number or type 'done':done
    =============================
    Your even numbers are ['12']
    Your odds numbers are []
    =============================
    Your smallest number is '12'
    
  3. У вас есть две проблемы:

    1. Нужно проверить место, прежде чем вы пытаетесь получить номер от него.

    2. Затем вы добавляете номер ввода в виде строки в свой список, который закончится неправильным результатом сортировки, поскольку он будет сортировать stringвместо number.


    allnums = []
    odds = []
    evens = []
    
    number = 0
    
       if number.lower() == 'done':
        evens.sort()
        odds.sort()
        allnums.sort()
        print("=============================")
        print("Your even numbers are", str(evens))
        print("Your odds numbers are", str(odds))
        print("=============================")
        print("Your smallest number is '"+str(allnums[0])+"'")
        break
    
    if number.isspace():
        print("Invalid input")
    else:
        number = int(number)
        if int(number) % 2 == 0:
            evens.append(number)
            allnums.append(number)
        elif int(number) % 2 != 0:
            odds.append(number)
            allnums.append(number)
    
  4. allnums = []
    odds = []
    evens = []
    
    number = 0
    
    while True:
        number = input("Enter a number or type 'done':")
    
        if number.lower() == 'done':
            print("=============================")
            print("Your even numbers are", str(evens))
            print("Your odds numbers are", str(odds))
            print("=============================")
            print("Your smallest number is '" + sorted(allnums)[0] + "'")
            break
        if not number.isnumeric():
            print("Invalid input")
            continue
        if int(number) % 2 == 0:
            evens.append(number)
            evens.sort()
            allnums.append(number)
            allnums.sort()
        if int(number) % 2 != 0:
            odds.append(number)
            odds.sort()
            allnums.append(number)
            allnums.sort()