2016-05-15 8 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)関数内で定義された変数は、関数外では見えません。 Donkey Kongが言及しているように、 '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 

エラーメッセージには、if文の操作である17行目でTypeErrorが発生したというメッセージが表示されます。唯一の文字列は変数nに含めることができます。

問題は、行番号16のinput()が数値演算に使用できないように文字列を返すことです。 int()で文字列を以下のように変換できます。

あなたがそれを修正すると、あなたの主な機能にいくつかの間違いがあることに気付くでしょう。あなたはfact()getN()と呼んでいます。どちらも戻り値ですが、返された値を使用しようとしていてもそれらを保存しません。私も特にchapter about whitespaceに、python style guideにあなたを指すように希望読みやすさの理由のためにさらに

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() 

+0

ご協力いただきありがとうございます。 – kim

0

少し複雑なエラーメッセージのビットですが、if not n%1 == 0:は、除算を実行しようとしていますが、nはまだ文字列です。あなたは自分の割り当ての前に、それらが定義されていない機能でどこでも変数を参照しているので、あなたのコードはまだ、しかし、動作しません

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

intへの入力をキャストする必要があります。あなたの関数の順序を変更し、各関数に必要なすべての関連するパラメータが渡されることを確認します。現在、関数のパラメータはまったく使用していません。

%は、文字列フォーマット操作でも変換指定子の開始を示すために使用されるため、このエラーメッセージが表示されます。 See the docs

0

使用このコード

デフ階乗(): iは= INT(入力())

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

for eve in mul: 
    i = i * eve 

return i 

プリント(階乗())

関連する問題