2016-05-15 4 views
-2

Я пытаюсь написать программу, предлагающую пользователям ввести положительное целое число и рассчитать факторный.Попытка рассчитать факторный, но у меня есть ошибка типа [python]

Это то, что я сделал

def main(): 
    getN() 
    fact() 
    print (n,"! is ",num) 

def fact(): 
    num=1 
    while n>=1: 
     num=num*n 
     n=n-1 
    return num 

def getN(): 
    n=input("Enter a positive integer: ") 
    if not n%1==0: 
     print("Enter a positive integer: ") 
    return n 

main() 

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

Мне нужно получить целое число postivie и вы хотите использовать функцию getN, чтобы гарантировать, что это положительный результат.

Пожалуйста, помогите мне.

Заранее спасибо.

+0

Какая часть кода действительно относится ошибка к? –

+0

1) См. [Здесь] (http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response) о том, как получить подтвержденный ввод пользователя. 2) Переменные, определенные в функции, не видны вне функции. Как упоминает Ослик Конг, вы должны передавать 'num' в' fact', и вам нужно сохранить значения, возвращаемые вашими функциями, в переменные. –

ответ

1

Когда вы получаете сообщение об ошибке, всегда рекомендуется публиковать сообщение об ошибке, включая трассировку стека. Ваш вопрос должен быть объяснен без кода, если это возможно. Поэтому предоставьте сообщение об ошибке, а также проанализируйте сообщение об ошибке самостоятельно.

Traceback (most recent call last): 
    File "/home/labbi/git/sandkasten/sandkasten.py", line 21, in <module> 
    main() 
    File "/home/labbi/git/sandkasten/sandkasten.py", line 2, in main 
    n1 = getN() 
    File "/home/labbi/git/sandkasten/sandkasten.py", line 17, in getN 
    if not n%1==0: 
TypeError: not all arguments converted during string formatting 

В сообщении об ошибке указано, что TypeError произошел в строке 17, которая является операцией в вашем операторе if. Единственная строка может содержаться в переменной n.

Ваша проблема в том, что input() в строке 16 возвращает строку, поэтому вы не можете использовать ее для числовых операций. Вы можете преобразовать строки с int(), как показано ниже.

Когда вы его исправили, вы также заметите несколько ошибок в своей основной функции. Вы звоните fact() и getN(). Оба значения возвращают, но вы не храните их, даже если пытаетесь использовать возвращаемые значения.

def main(): 
    n_result = getN() 
    num_result = fact(n_result) 
    print (n_result,"! is ",num_result) 


def fact(n): 
    num=1 
    while n>=1: 
     num=num*n 
     n=n-1 
    return num 


def getN(): 
    n = int(input("Enter a positive integer: ")) 
    if not n%1==0: 
     print("Enter a positive integer: ") 
    return n 

main() 

Кроме того, для удобства понимания, я также хотел бы указать вам на python style guide, особенно в chapter about whitespace.

+0

Спасибо за помощь и совет. – kim

0

Немного сложного сообщения об ошибке, но if not n%1 == 0: является попыткой выполнить разделение мод, однако n по-прежнему является строкой. Вы должны бросить вход в int с

n=int(input("Enter a positive integer: ")) 

Ваш код еще не будет работать, однако, потому что вы ссылаетесь переменные везде перед их назначением, а также в функциях, для которых они не определены. Я бы подумал о повторной организации порядка ваших функций и обеспечении того, чтобы все необходимые параметры, необходимые для каждой функции, были переданы - в настоящее время вы вообще не используете функциональные параметры.

Как в стороне, вы получили это сообщение об ошибке, так как % также используется в операциях форматирования строк, чтобы отметить начало спецификатора преобразования. See the docs.

0

Используйте этот код

Защиту факторный(): я = INT (вход())

mul = list(range(1, int(i))) 

for eve in mul: 
    i = i * eve 

return i 

печати (факторный())

Смежные вопросы