- ベストアンサー
Pythonについて
Pythonの勉強を始めて10日程の初心者です。 ホームページに載っていました例題を実際に動かそうとしましたが上手く行きません。 バージョンは3.3.0です。 「すべてのプログラム」-「python3.3」-「「IDLE(pythonGUI)」で動かそうとしています。 i = 3 while 0 < i: print(i) i -= 1 else: print 'else i=', i3 i -= 1 を入力した後Enterキーを押すと例題が処理を始めてしまい、else: を入力出来ません。 どうすれば良いんでしょうか。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
i-=1 のあとで | ← ここにカーソルがある状態になっていると思います。 ここでDELキーで1文字消すと、 | ← このように、先頭にカーソルが来るはずです。そうしたら続けて else:(Enter) と入力します。空白は入れません。すると | ← と、上のi=-1等と同じ位置にカーソルがくるはずです そうしたらそのまま print("else i=",i)(Enter) (Enter) と入力すれば、期待通りに動くはずです。 その例題は、本当は、こんなプログラムです。 i=3 while 0<i: print(i) i-=1 else: print("else i=",i) ~.pyと言うファイルに保存して、 python ~.py で実行するときは、この形式で書きます。 >>> は入力を促すただプロンプトです。(Windowsのコマンドプロンプトなら C:\MyDocument\> とか先頭に出てるのと同じです) プログラムの部品ではありません IDLEでは、whileなどのブロック構文は、それが終了するまでプロンプトが出ないようです。そのため >>> i=3 #単独行のここと >>> while 0<i: #ブロックの始まりのここにだけ >>> が表示され print(i) i-=1 else: # ここは継続中なので >>> が表示されません print("else i=",i) # ここでEnterだけ入力することでwhileブロックが実行され 3 2 1 else i=0 #と出力され >>> # 次のコマンド入力待ちになります ちなみに、会話モードというのは、コマンドプロンプトから pythonとだけコマンドを入れたときに実行されるモードで、IDLEのものに似てますが >>> i=3 #単独行は同じ >>> while 0<i: #ブロックの始まり ... print(i) # と、ブロック中は ... と言う専用のプロンプトに変わります。 ... i-=1 # ただ空白は自動で入らないので自分で入力します。 ... # ここで空白で上と位置を揃えれば空行を入力することができます ... else: # elseとwhileの位置も揃います(フォントの関係で揃って見えないかもしれませんが) ... print("else i=",i) ... #ここでEnterだけ入力すると実行が始まります idleでのPython Shellでの入力がうまくできないなら ・Pythonの会話モードを使う ・スクリプトファイル(.py)を作成して、python ~.py 、 または、IDLEでOpenしてRunで実行する のがいいのではないでしょうか
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
失礼しました。idleは使ってなかったので、挙動の違いに気付きませんでした。 idleでは、Pythonの会話モードと以下の点が違うようです。 ・字下げにTABが使われていて、ブロック開始で自動で入力される ・空白文字だけの行は空行扱い ・プロンプト(>>>)のある行の無い行とで見た目の先頭位置が違う 次のようにして動作確認しました >>> while 0<i: #← 4文字目字下げに見えるけど、実際は字下げ無し print(i) i-=1 #← コメントにすれば空行にはならない/またはすぐにelse:にする else: #← whileと同じレベルに字下げする必要があるので、先頭から print("else i=",i)
補足
何度も回答していただいてありがとうございます。 「else: #← whileと同じレベルに字下げする必要があるので、先頭から」 >>> i=3 >>> while 0 < i: print(i) i -= 1 else: 「else:」を行の先頭から入力し、字下げしますと「>>>」のマークが表示されず、Enterキーを押すとエラーになってしまいます。キー入力で「>>>」を入れてもエラーになります。 何度も回答していただいて、恐縮です。 一度質問を締め切らせていただいても良いんですが。 それともこのまま続けて回答してもらえますか。
- kmee
- ベストアンサー率55% (1857/3366)
> (空白だけを入力、数を揃えてEnter) って書いたんですけど、やりました? 今読み返してちょっとわかりずらい気もするのでもう一度書くと 「半角スペースを上の行と同じだけ打ち込んでからEnter」 あるいは 「空行を作らずにelse:を入力」 でやってみてください
補足
何度もありがとうございます。 「半角スペースを上の行と同じだけ打ち込んでからEnter」 >>> i=3 >>> while 0 < i: print(i) i -= 1 │ 私は上の説明をこのように解釈して、ここでEnterキーを押すと、プログラムが走ってしまいます。 「空行を作らずにelse:を入力」 >>> i = 3 >>> while 0 < i: print(i) i -= 1 else: 又は >>> i = 3 >>> while 0 < i: print(i) i -= 1 else: どちらもエラーになりますが。
- kmee
- ベストアンサー率55% (1857/3366)
Pythonの特徴は「先頭の空白に意味がある」であることはご存知かと思います。 このQAだと空白がまとめられてしまうので、Pythonの質問をするのには不適なのですが。 その例題は i = 3 while 0 < i: print(i) i -= 1 else: print('else i=', i) のように文字が揃っているのではないでしょうか? # 位置を揃えるために、全角スペースを使っています、実際に入力するときは半角スペースにしてください。 もし「i -= 1 を入力した後Enterキー」が i -=1(Entrer) ではなく i-=1(Entrer) とした、という意味なら、上記と動作が違ってきます。 先頭の正しく空白を入れましょう。 もし「i -= 1 を入力した後Enterキー」が i -=1(Entrer) (ここに空行を作るためにEnter) とした、と言う意味なら、会話モードでは、空行は「先頭の空白無し」と解釈されるので、ブロックが終了したと解釈されます。空行に相当するものを入れたいのなら i -=1(Entrer) (空白だけを入力、数を揃えてEnter) とすると、ブロックが継続していると解釈されて続きを入力できます。 あるいは、会話モードは使わずに、スクリプトファイルを作成して実行すれば、構文解析が行われ、空行はうまく無視してくれます。
補足
回答ありがとうございます。 プログラムの書き方が間違っていました。すみません。 もう一度質問させていただきます。 >>> i=3 >>> while 0 < i: print(i) i -= 1 ここまで入力して次にelse: を入力する為にEnterキーを押します。 >>> i=3 >>> while 0 < i: print(i) i -= 1 │ この様になります。else:を入力する為にもう一度Enterキーを押すと >>> i=3 >>> while 0 < i: print(i) i -= 1 3 2 1 >>> となってしまいます。 >>>else: Print( 'else i=', i) を打ち込んでから走らせたいんですが、どうすれば良いでしょうか。
お礼
kmee様 出来ました。 ありがとうございました。 「>>>」にこだわり過ぎていたようです。 会話モードについても、解ってきました。 何か、肩の荷が下りた感じです。 また何かPythonについて質問するかも分かりませんので、その時はよろしくお願いいたします。