エラーメッセージが表示されたら、スタックトレースを含むエラーメッセージ全体を送信することをお勧めします。可能であれば、あなたの質問はコードなしで自己説明するべきです。したがって、エラーメッセージを提供するだけでなく、エラーメッセージを自分で分析してください。
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()
。
エラーコードのどの部分を指すんに? –
1)検証されたユーザー入力を取得する方法については、[こちら](http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response)を参照してください。 2)関数内で定義された変数は、関数外では見えません。 Donkey Kongが言及しているように、 'num'を' fact'に渡す必要があり、関数によって返された値を変数に保存する必要があります。 –