質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

449閲覧

PYTHON 改行したらすぐに出力されてしまう

phoi

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/04/20 09:23

編集2024/04/21 05:00

実現したいこと

複数の複合文のコードを打ち込みたい。

発生している問題・分からないこと

pythonの教科書(コーリー・アルソフ著『独学プログラマー』日経BP社、2018年)を購入し勉強している状況で、例に3つの複合文からなるコードの紹介がされていてそれを自分も打ったのですが、二行以上改行すると一つ目の複合文の出力がなされてしまい、二つ目、三つ目の複合文を打ち切ることができません。
間隔をあけて複数の複合文を書き込むにはどうすればいいんでしょうか。

また、使っているソフトはIDLE 3.12.3を使用しています。

該当のソースコード

python

1x=100 2if x==10: 3 print("10!") 4elif x==20: 5 print("20!") 6else: 7 print("i have no idea") 8 9i have no idea 10 11↑本当はもっと書きたいのに一つの複合文で終わってしまいます。 129行目の「i have no idea」というのは何でしょうか。ご自分で入力したものですか、それとも勝手に表示されたのですか。 13→一つ目のコードが出力された結果、表示されたものです。 14 15 16 17### 試したこと・調べたこと 18- [x] teratailやGoogle等で検索した 19- [ ] ソースコードを自分なりに変更した 20- [ ] 知人に聞いた 21- [ ] その他 22 23##### 上記の詳細・結果 24googleで「python 複数の節 打てない」などと検索かけてみましたが、ヒットしませんでした。 25 26### 補足 27特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2024/04/20 09:40

・コードを「打つ」のに使っているソフトやアプリの名前は何ですか。 ・9行目の「i have no idea」というのは何でしょうか。ご自分で入力したものですか、それとも勝手に表示されたのですか。 ・「一つ目の節が出力されてしまい、全ての節を打ち切ることができません」というのは、具体的に画面に何が表示されるということなのでしょうか。 なお、お答えはこのコメント欄に書くのではなく、質問文を編集して書いてください。
melian

2024/04/20 09:50

> 二行以上改行すると インタラクティブモードの場合、その様な挙動になります。ソースコードをファイルに保存して実行するか、もしくは VScode+プラグインなどのIDEを利用することをお勧めします。
meg_

2024/04/20 10:04

> pythonの教科書を購入し勉強している状況で 書籍を参考にして学習している場合、大抵はその書籍に環境構築についても記述があるはずです。おそらくはそれに従っていないので書籍通りの結果にならないのだと思います。書籍と同じ環境にしないと同じ結果は得られにくくなるかと思います。
ikedas

2024/04/20 13:40

みなさんいろいろなアドバイスをしておられますが、まず質問者さんの現状を確認しないことにはどなたも確実な回答ができないと思っておられます。そのため、次の情報を提供してください。 ・「pythonの教科書を購入」なさったとのことですが、その書籍の書誌 (著者、標題、出版社) を明記してください。 なお、情報はこのコメント欄に書くのではありません。質問文を編集して書いてください。
guest

回答2

0

ベストアンサー

コーリー・アルソフ『独学プログラマー: Python言語の基本から仕事のやり方まで』(日経BP社) は近所の公立図書館に蔵書があったのでみてきました。

本書では、IDE (統合開発環境) としてPythonの配布物に含まれているIDLE (Interactive DeveLopment Environment) を使って学習を進めることになっていますね。このIDEは、対話シェル (インタラクティブシェル) から直接コードを実行する方法と、エディタで書いたコードを保存しておいてあとで何度でも実行できる方法との両方に対応しています (12-14ページ)。

(実は、Pythonインタプリタを何のオプションもつけずにコマンドプロンプトやターミナルから実行しても、対話シェルが起動します。他のコメントや回答をしている皆さんは普段IDLEを使っていない人が多いので、「何か手順が違うのではないか」と思ったのですね。私も最初そう思いました。)


前置きが長くなりました。

さて、対話シェルでは画面に文を打ち込むと即座に実行されます。

ですから、ご質問に挙げられているコードでは、1行目の

x=100

というは、エンターキーを押した直後に実行されているのです。この文は画面上には何も表示していないだけです (これは代入文で、xという変数に100という値を入れています。実際、このxの値はこの後のコードの中で使えます)。

しかし、1行ずつ実行できない場合もありますよね。

>>> x=100 >>> if x==10: ... print("10!") ... elif x==20: ... print("20!") ... else: ... print("i have no idea") ...

「if x == 10:」の行の後では、入力を促すマーク (プロンプト) が変化しています。文がまだ終わっていないため、続きの入力を待っている状態です。文が完結したら、入力されたものをまとめて実行します。

上記の場合、最後のprint()の後にさらに他のインデントされた文が入力されるかもしれません。ですから文が完結したとはまだ判断できません。

逆にいうと、インデントした行がそれ以上入力されなければ文はそれ以上続きませんから、それまでに入力された文全体が即座に実行されます。つまり、エンターキーをもう一回打って空行 (改行だけの行) を入れればいいです。

>>> x=100 >>> if x==10: ... print("10!") ... elif x==20: ... print("20!") ... else: ... print("i have no idea") ... ここでエンターキーを押す i have no idea >>>

Pythonの文には単純文と複合文があります (43-45ページ) が、Pythonはプログラムとして入力された文を順番に読み取って、読み取ったものは即座に実行します。——実は、ファイルに保存したプログラムを実行する場合も同じで、Pythonはファイルに書かれた文を順番に読み取っていき、読み取ったものは即座に実行します。ファイルの場合は入力したプログラムが画面に表示されないのでわかりにくいですが、実行のしかたは同じです。

ですから、上のようにプログラムを入力している途中で画面への出力があるのは通常の動作です。

ひとつ違いがあるのは、「複合文の終わりを示すためには空行を入力しなければならない」というのは対話シェルを使った場合だけのルールだということです。ファイルに保存したプログラムの場合、複合文の後に空行がなくても構いません。下記のコードはファイルに保存して実行すると正常に動作しますが、対話シェルに入力すると8行目で構文エラー (SyntaxError) が発生します。

python

1x=100 2if x==10: 3 print("10!") 4elif x==20: 5 print("20!") 6else: 7 print("i have no idea") 8if x == 100: 9 print("x is 100!")

本書では基本的にIDLEの対話シェルを使っています。プログラムをファイルに保存してから実行する必要が出てくるのは、第8章「モジュール」のところが最初のようです。モジュールの場合は他のプログラムで読み込んで使えるようにしたいので、ファイルに保存しておく必要がありますから。

後の章で簡単なプログラム開発をするようになると、ファイルに保存したプログラムを実行することが必須になります。ですから対話シェルの方法とプログラムを保存する方法と両方をマスターしておくといいですね。


補足。

図書館で流し読みしただけですが、全くの初心者が独学でPythonプログラミングを身につける (最終的には職業にすることまで視野に入れて) ための書籍として、この『独学プログラマー』はまあ良い本ではないかと思いました。

Pythonのバージョンは3.5を前提としていて、それ以降に追加された新しい仕様のことは当然扱っていませんが、それらは必要に応じて今後学んでいけばよいので特に問題ないと思います。

なお、本書の読みかたについて。

複数の章を第1部から第5部 (それと補章をまとめた第6部) にまとめた構成となっており、それぞれの部の最後には学んだことのまとめの章が置かれる構成となっています。

ですので、読み進めていく中で疑問などを持ったら一旦書き留めておいて、部の最後まで読み終わってから出てきた疑問をまとめ、teratailなどで質問するとよいと思います (だから、本書では第1部の最後でteratailが紹介されているのですね😃)。

また、ときどき後のほうの章を斜め読みしてみるのもいいと思います。今は理解できないことが多いでしょうけれど、今後やっていくことが漠然とでもわかっていたほうがモチベーションも保てます。

本書の冒頭でも述べられていますが、独学でプログラミングを身につければそれは強みにもなります。頑張ってください。

投稿2024/04/21 10:36

編集2024/04/21 12:48
ikedas

総合スコア4352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phoi

2024/04/22 02:07

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 わざわざ図書館に行って本を見ていただいたということで、本当にありがとうございます😊😊 なるほどpythonは特に対話シェルでは、空行を入れてしまうと文の終わりだと判断されてしまい実行されるんですね。 ファイルに保存してそれをmoduleで対話シェルに移したのですがその場合だと、複数の複合文をすべて打ち込むことができました。ありがとうございます。 それにpython勉強のアドバイスまでしていただきikedasさんには感謝しかないです!独学がんばります!ありがとうございました!
guest

0

本の第2章の「プログラムを保存する」に書いてあると思います。
また,今実行している環境はその一つ前の「対話シェル」に説明があると思います。

投稿2024/04/21 07:25

ujimushi_sradjp

総合スコア2094

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問