2016-11-09 2 views
0

Моего кода выглядит следующим образом:Если ошибка утверждения: ValueError: неверная буквальный для Int() с базой 10: «» и из порядка 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' 

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

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

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

ответ

0
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 

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

[email protected]:~/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' 
+0

Тем не менее возвращает тот же 'Traceback (самый последний вызов последнего): Файл "XXXX", строка 17, в , если Int (число)% 2 == 0: ValueError: неверный буквальным для Int() с основанием 10: '' ' – maaier

+0

вы уверены, я его протестировал, давая мне отличный результат. Подождите, покатете вывод –

+0

Ага, у меня не было проходов. Теперь результаты имеют четкий недействительный ответ. Awesome :) – maaier

0

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

+0

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

0

У вас есть две проблемы:

  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) 
0
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() 
Смежные вопросы