2015-05-06 3 views
2

не может заставить этот цикл работать, он продолжает возвращаться к двоичному входу. Я бы хотел, чтобы он вернулся к выбору меню. Извините за вопрос noob. Я новичок в python и программировании.Проверка целочисленного ввода python

import sys 
loop = 0 
menu_Select = 0 
for menu_Select in range(1,100): 
    #Display user options to the screen 
    print('*** Menu ***') 
    print('1. Convert to binary') 

    userMenu = input('What would you like to do [1,2,3,4]? ') 
    if userMenu != '1' and userMenu != '2' and userMenu != '3' and userMenu != '4': 
     print("Please enter either 1, 2, 3, or 4.") 

    elif userMenu == '4': 
     print('Goodbye.') 
     sys.exit(0) 

    elif userMenu == '1': 
     #Decimal to Binary convertion code 
     print('\n') 
     while loop < 1: 
      while True: 
       try: 
        user_Number = (int(input('Please enter number: '))) 
       except ValueError: 
        print('wrong') 
       else: 
        binary_num = [] 

        while (user_Number > 0): 
         if user_Number % 2 != 0: 
          binary_num.append(1) 
         elif user_Number % 2 == 0: 
          binary_num.append(0) 
         user_Number = user_Number // 2 
        binary_num.reverse() 
        binary_display = ''.join(str(k) for k in binary_num) 
        print('Binary number: ',binary_display) 
      loop += 1 
+2

Когда вы ожидаете окончания цикла 'while True:'? – Matthias

+0

После отображения двоичного числа – girthquake

+0

Мне не разрешено использовать оператор break – girthquake

ответ

2

Использование input() фактически преобразует то, что пользователь вводит в int, если это возможно. Посмотрите, что получится:

>>> input("= ") 
= 12 
12 

Это возвращает 12, а не «12». Для ввода, чтобы дать мне «12», мне нужно вручную обернуть его в кавычки.

>>> input("= ") 
= '12' 
'12' 

Вместо этого используйте raw_input(), чтобы получить Python читать что-либо типы пользователей в виде строки.

>>> raw_input("= ") 
= 12 
'12' 

Также, как уже отмечалось, вы используете неправильные петли. Если вы хотите продолжать запрашивать у пользователя ввод, пока не получите действительный номер, лучше обернуть меньшее количество кода соответствующим условием.

ie. Проведите цикл только в том случае, если не существует допустимого числа, и он содержит только строки, в которых происходит вход.

 user_Number = None 
     while user_Number is None: 
      try: 
       user_Number = (int(raw_input('Please enter number: '))) 
      except ValueError: 
       print('wrong') 
     binary_num = [] 

     while (user_Number > 0): 
      if user_Number % 2 != 0: 
       binary_num.append(1) 
      elif user_Number % 2 == 0: 
       binary_num.append(0) 
       user_Number = user_Number // 2 
     binary_num.reverse() 
     binary_display = ''.join(str(k) for k in binary_num) 
     print('Binary number: ',binary_display) 
0

Изменение:

if userMenu != '1' and userMenu != '2' and userMenu != '3' and userMenu != '4': 

To:

if userMenu != 1 and userMenu != 2 and userMenu != 3 and userMenu != 4: 

А также обновить, если заявления, чтобы увидеть, если они ИНТ, а не строк. Это будет работать на python 2.7, не уверен в python 3.

+0

Код выглядит как Python 3, поэтому ваш ответ неверен. Если вы внимательно прочитаете вопрос, вы увидите, что это не проблема. – Matthias

+0

Gotcha. Я поместил свой код в мой, который работает 2,7 и запускал его, он зацикливался на первом вопросе и никогда не доходил до операторов if. Но теперь я вижу, что ему нужно вырваться из цикла 'while True'. – Alex

+0

@ Алекс спасибо, хотя! – girthquake

1

Вы можете ввести логическую переменную done = False, до цикла True, и изменить этот цикл на while not done. Затем установите done на номер True после того, как было напечатано двоичное число.

elif userMenu == '1': 
    #Decimal to Binary convertion code 
    print('\n') 
    done = False 
    while not done: 
     try: 
      user_Number = (int(input('Please enter number: '))) 
     except ValueError: 
      print('wrong') 
     else: 
      binary_num = [] 
      while (user_Number > 0): 
       if user_Number % 2 != 0: 
        binary_num.append(1) 
       elif user_Number % 2 == 0: 
        binary_num.append(0) 
       user_Number = user_Number // 2 
      binary_num.reverse() 
      binary_display = ''.join(str(k) for k in binary_num) 
      print('Binary number: ',binary_display) 
      done = True 
Смежные вопросы