2017-01-27 6 views
1
  1. Запросит у пользователя номер
  2. Если пользователь вводит 'q', он покидает программу.
  3. Если пользователь вводит нецелое значение, выведите: "Please enter a number" и запросите первое число еще раз.
  4. Если пользователь вводит целое число, преобразуйте его в int() и попросите второй номер.
  5. Если пользователь вводит 'q' для второго номера, закройте программу.
  6. Если пользователь вводит не целое значение для второго номера, выход: "Please enter a number." и попросить второго числа снова
  7. Если пользователь не ввести целое число, преобразовать его в int().
  8. Отображение их фактор (Имейте в виду, что вы не можете разделить на 0.)

Это то, что я сделал:Как я могу улучшить эту программу?

print("Give me two numbers and I will divide them.") 
print("Enter 'q' to quit.") 

while True: 
    first_number = raw_input('\nFirst number: ') 
    if first_number != 'q': 
     try: 
      first_number = int(first_number) 
     except ValueError: 
      print("Please enter a number.") 
      continue 
    else: 
     break 
    while True: 
     second_number = raw_input("Second number: ") 
     if second_number != 'q': 
      try: 
       second_number = int(second_number) 
      except ValueError: 
       print("Please enter a number.") 
       continue 
     else: 
      break 
     try: 
      print(first_number/second_number) 
      break 
     except ZeroDivisionError: 
      print("You cannot divide by 0.") 
+1

Если ваш код работает, вы должны использовать проверку кода, а не SO. Они дают более глубокий обзор. – Uriel

+0

http://codereview.stackexchange.com/ –

+0

Первое очевидное улучшение: код для получения первого и второго номера одинаковый, поэтому его следует учитывать как функцию. –

ответ

1

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

def get_user_input(): 
    while True: 
     response = input('Please enter a number: ') 
     if response == 'q': 
      return False, None 
     try: 
      return True, int(response) 
     except ValueError: 
      continue 


def main(): 
    print('Give me two numbers and I will divide them.') 
    print('Enter \'q\' to quit.') 

    continue_program, first_number = get_user_input() 
    if not continue_program: 
     return 

    continue_program, second_number = get_user_input() 
    if not continue_program: 
     return 

    try: 
     quotient = first_number // second_number 
     print('{}/{} = {}'.format(first_number, second_number, quotient)) 
    except ZeroDivisionError: 
     print('You cannot divide by zero') 


if __name__ == '__main__': 
    main() 

Пример бежать (счастливый путь)

Give me two numbers and I will divide them. 
Enter 'q' to quit. 
Please enter a number: 10 
Please enter a number: 6 
10/6 = 1 
0

полезная вещь: sentinel в ИТЭР() значение для такого рода сценариев

import sys 
def get_number(display_msg=""): 
    sys.stdout.write(display_msg) # OR partial function can be used. 
    for response in iter(input, 'q'): # sentinel 
     try: 
      return int(response) 
     except ValueError: 
      continue 
first_number = get_number(display_msg="Please enter 1st the number: ") 
second_number = get_number(display_msg="Please enter 2nd the number: ") 
if isinstance(first_number, int) and isinstance(second_number, int): 
    #..do something with first_number, second_number 
Смежные вопросы