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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

918閲覧

About while and for loop

6shi

総合スコア15

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2019/02/14 18:23

編集2019/02/14 18:46
コード ```### 前提・実現したいこと while & for ループに関しての質問です。 次のコードに数値を全く入力しなかった場合, console上にエラーメッセージではなく 'No data entered'と表示したいのですが, 可能でしょうか? コード

values=[]
print("Enter a number or press enter to quit: ")
while True:
x = input("? ")
if x != "":
x=float(x)
values.append(x)
elif x=="":
break
average = sum(values)/len(values)
print('Total is ', sum(values), ' and average is ', average)
print('Maximum value is ', max(values), ' and minimum value is ', min(values))
コード

ここに質問の内容を詳しく書いてください。 (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ

エラーメッセージ

### 該当のソースコード ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

bochan2👍を押しています

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

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

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

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

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

guest

回答2

0

averageをwhile文から外し、while文の結果のvaluesをifでチェックすればいいのではないでしょうか。
例えば

Python

1while True: 2 x = input("? ") 3 if x == "": 4 break 5 x = float(x) 6 values.append(x) 7 8if values == []: 9 print('No data ...') 10else: 11 average = ... 12 print(...)

投稿2019/02/15 00:50

xxBadMoon2017

総合スコア114

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

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

6shi

2019/02/21 18:33 編集

分かりやすい解説ありがとうございます! うまく解決することができました。
guest

0

ベストアンサー

ループ脱出後にvaluesが空かどうか判定し、分岐すれば良いです。

Python

1if values: 2 空のときの動作 3else: 4 空でないときの動作

if values: は、Pythonにおいては if len(values) != 0: と同じように働きます。(註)
実は if x != "": も同様に if x: と書けます。if x == "": なら if not x: です。


註:
コメントにも指摘があるとおり、これはシーケンスに限った記述です。
リファレンスにはもう少し詳しく正確な解説があります。

オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが __bool__() メソッドを定義していて、それが False を返す場合、または __len__() メソッドを定義していて、それが 0 を返す場合は偽と判定されます。

主な組み込みオブジェクトで偽と判定されるものを次に示します:

  • 偽であると定義されている定数: None と False
  • 数値型におけるゼロ: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • 空のシーケンスまたはコレクション: '', (), [], {}, set(), range(0)

引用元:Python 標準ライブラリ » 組み込み型 » 真理値判定

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Python
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2019/02/14 18:32

編集2019/02/16 13:09
LouiS0616

総合スコア35660

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

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

6shi

2019/02/14 19:39

if len(values)==0: print("No data entered!") これをループ脱出後にやったのですが、ZeroDivisionErrorと表示されてしまいました。 この対処法はありますか?
LouiS0616

2019/02/15 03:26

if - else にしましたか? if文を埋め込むだけだと、メッセージを表示した後の挙動は今までと変わりないものになります。
LouiS0616

2019/02/15 03:27

あ、averageの計算位置がおかしいですね。 ループ内で計算する必要は無いです。
6shi

2019/02/15 12:40

解決することが出来ました! ありがとうございます
KSwordOfHaste

2019/02/16 11:28

to: LouiS0616さん > if values: は、Pythonにおいては if len(values) == 0: と同じように ちょっとした書き間違いと思いますが > if values:は(valuesがシーケンスやコレクションの場合)if len(values) != 0:と同じように ですよね。
LouiS0616

2019/02/16 11:36

『このケースだと全部lenで説明できるからそれでいいや』と、あまり深く考えずに書いてしまいました。 確かに言葉足らずで誤解を招く表現ですね。ご指摘ありがとうございます。 --- 正確な説明はこちら。 > オブジェクトは、デフォルトでは真と判定されます。ただしそのクラスが __bool__() メソッドを定義していて、それが False を返す場合、または __len__() メソッドを定義していて、それが 0 を返す場合は偽と判定されます。 https://docs.python.jp/3/library/stdtypes.html#truth
KSwordOfHaste

2019/02/16 12:50

すみません。余計な括弧書きを入れちゃいましたが、主として申しあげたかったのは==0と!=0の書き間違いの方です。
LouiS0616

2019/02/16 13:04 編集

あ、そっちですか。 それは完全にケアレスミスです。全部真偽がひっくり返ってますね... 回答に反映させていただきますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問