電子書籍の厳選無料作品が豊富!

#factorial
x=int(input())
def f(x):
if x<=1:
return 1
else retuen x*f(x-1)
print(f(x))

f(10)

RUNするとYyntaxErrorが出て正常に動作しません。
何故でしょうか?
宜しくお願いします。

「IDLE (Python 3.7 32-」の質問画像

質問者からの補足コメント

  • つらい・・・

    有難う御座います。指摘のとうり書きなをしました。
    #factorial

    x=int(input())
    def f(x):
    if x<=1:
    return 1
    else:retuen x*f(x-1)
    print(f(x))

    f(10)

    RUNするとx*f(x-1)のxがSyntaxerror invalid syntaxが表示されます。
    また、単純な書き間違いは何処でしょうか?
    宜しくお願いします。

      補足日時:2018/08/01 13:56
  • つらい・・・

    有難う御座います。
    else:retuen x*f(x-1)の誤記訂正しました。retuen ー>return でSyntaxerror は出なく成りましたが
    runを実行しても
    X=10でのf(10)の結果が出力されません。
    何故でしょうか?
    宜しくお願いします。

    「IDLE (Python 3.7 32-」の補足画像2
      補足日時:2018/08/02 11:57
  • HAPPY

    有難う御座います。
    #factorial
    #x=int(input()) #error checkでerrorに成るのでコメントにしました。
    def f(x):
    if x<=1:
    return 1
    else:return x*f(x-1) #print(f(x))を削除しました。

    print(f(993)) #933迄正常計算出来ました。

    制約が有って使いづらいですね。
    Mapleでは間単ですが

    「IDLE (Python 3.7 32-」の補足画像3
      補足日時:2018/08/03 15:46

A 回答 (3件)

表示されないのは「表示するように作られていない」からです。




会話モードで実行しているときは、入力した式の計算結果を表示するように、自動変換が行われている、と考えるとよいでしょう。
>>> のときに
1+2
と入力したら、自動で
print(1+2)
に変換される、とかそういうイメージです。

スクリプトを実行するときはそうはならないので、表示したいなら「表示する」と明記する必要があります。
printと使うなど。


print(f(x))
はありますが、字下げの位置から def f(x): の一部と解釈されます。
その前のif文で、 真の場合でも偽の場合でも returnで戻ってしまうので、この行が実行されることはありません。
先頭に字下げを戻すと、今度は存在しない変数xを参照しようとしてエラーになります。
この1行は削除するのがいいでしょう。
    • good
    • 0

文法エラーというのは、コンピュータがプログラムを解釈しているときに、どうにも辻褄が合わなくなったときに発生します。


そのため、発生箇所と真の間違い箇所が一致しないことがあります。
発生したところだけではなく、前後も確認しましょう。


指摘されている箇所の前後を抜き出すと

else:retuen x*f(x-1)

あきらかに変ですよね?
    • good
    • 0

Pythonは、字下げ( 行頭の空白)で、機能をブロックに分けています。


そのため、字下げの位置について、とてもシビアです。

PythonのSyntax Error (文法的な間違い) の多くは、この字下げのミスです。

if x<=1:
で始まったら、この if の i と同じ位置まで字下げが戻ってくるまでが一つのブロックになります。
ブロック中は、常にそのブロックの字下げを維持しないといけません。

ところが写真を見るかぎり、 else retuen x*f(x-1) の else の e は if の f の位置から始まっています。
if とも違う、他のどの字下げとも違う位置からの字下げでは、何と対応したelseなのかがわかりません。
前にifがあるのだから、それに対するelseだよ、なんて理屈はPythonには通用しません。
ちゃんと、 対応する if と同じ字下げにしましょう。

また、 else は単独では使いません。
elseのブロックが始まる、という意味で else: と : を付けます。


あと、単純な書き間違いがあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!