Python кроме ValueError: Пока Истина - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь использовать 'while true', чтобы попросить пользователя ввести 0 или положительное целое число. Я пробовал пару разных способов, и все они, кажется, имеют разные проблемы. Функция def positive_int отклоняет буквы и отрицательные числа, но не позволяет факториальной функции работать. Факториальная функция работает сама по себе. Я получаю код ошибки: TypeError: неподдерживаемые типы операндов для +: 'NoneType' и 'int' для этой строки для i в диапазоне (1, num + 1) :. Спасибо за помощь.

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             break
         except ValueError:
             print("Please enter a positive integer.")     

print('\n')    
print("The program will compute and output the factorial number.")
def factorial():
        num = positive_int('Please enter the number to factorial: ')
        factorial = 1
        if num == 0:
           print("\nThe factorial of 0 is 1")
        else:
           for i in range(1,num + 1):
               factorial = factorial*i
           print("\nThe factorial of", num,"is",factorial)  
factorial()

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Функция positive_int() ничего не возвращает, что означает, что num = positive_int() устанавливает num в None. Позже код завершается ошибкой, когда он пытается добавить это None значение в int.

. Это можно исправить, заменив оператор break на return или вернув num после выхода из него. l oop:

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             return num  # Replacing break with return statement 
         except ValueError:
             print("Please enter a positive integer.") 

или

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError
             break
         except ValueError:
             print("Please enter a positive integer.") 

     return num  # Breaking out of the loop takes you here
0 голосов
/ 27 апреля 2020

Проблема в том, что Positive_int ничего не возвращает

Попробуйте:

def positive_int(prompt=''):
     while True:
         try:
             num = int(input(prompt))
             if num < 0:
                 raise ValueError

             return num  # change to return value rather than break
         except ValueError:
             print("Please enter a positive integer.")     

print('\n')    
print("The program will compute and output the factorial number.")
def factorial():
        num = positive_int('Please enter the number to factorial: ')
        factorial = 1
        if num == 0:
           print("\nThe factorial of 0 is 1")
        else:
           for i in range(1,num + 1):
               factorial = factorial*i
           print("\nThe factorial of", num,"is",factorial)  
factorial()
0 голосов
/ 27 апреля 2020

Вы используете факториал как в качестве имени функции, так и в качестве имени переменной.

...