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

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

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

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

Python

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

Q&A

解決済

1回答

2142閲覧

空のリストで0を出力する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Python

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

1グッド

1クリップ

投稿2020/07/15 08:14

編集2020/07/15 11:23

空のリストが入力された際に、0を返すコードがわかりません。
文字列として読み込まれているのはわかるのですが、記号で[]と入力された時に0が出力出来ません。
アドバイスをよろしくお願いします。

『プログラム内容』
1行目で読み込んだ数値の分だけリストを表示します。
入力には数値(浮動少数点数)のリストが読み込まれます。
与えられたリストの最大値と最小値の差を求めます。
ただし空のパラメータが読み込まれた場合には0を返します。

入力例
2
[]
10.2 -2.2 0.1 1 0.5

出力例
0
12.4

上記の入力例に対して、その下の出力をしたいのですが以下のコードだと下記の内容のようなエラーが発生してしまいます。

Traceback (most recent call last):
File "Main.py", line 16, in <module>
print(round(float(max(j))-float(min(j)), 2))
ValueError: could not convert string to float: '[]'

私のプログラムしたコードは以下のとおりです。

array=[] line = int(input()) for i in range(line): value = input().rstrip().split(" ") array.append(value) for j in array: if j == "[" and "]": print("0") else: print(round(float(max(j))-float(min(j)), 2))

アドバイスをよろしくお願いします。

DrqYuto👍を押しています

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

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

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

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

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

kirara0048

2020/07/15 08:27

「空のパラメータが読み込まれた場合には0を返します」とありますが「数字以外が入力された場合」という意味でしょうか。 関連して、`[]`と入力された場合の出力例が`[]`となっているのは`0`の誤りですか?
退会済みユーザー

退会済みユーザー

2020/07/15 11:30

その通りです。大変失礼いたしました。 出力例のところを訂正いたしましたので、よろしくお願いします。 ご指摘ありがとうございました。
guest

回答1

0

ベストアンサー

たとえば、if を次のように修正してみてはどうでしょうか:

python

1array=[] 2line = int(input()) 3 4for i in range(line): 5 value = input().rstrip().split(" ") 6 array.append(value) 7 8for j in array: 9 if len(j) == 1 and j[0] == "[]": 10 print("0") 11 else: 12 print(round(float(max(j))-float(min(j)), 2))

実行結果:

console

1$ python test.py 22 3[] 410.2 -2.2 0.1 1 0.5 50 612.4

出力結果の 0[] に変えたいときは、print("0")print("[]") に変更してください

投稿2020/07/15 08:35

y_shinoda

総合スコア3272

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

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

退会済みユーザー

退会済みユーザー

2020/07/15 11:28

ありがとうございます! 自分もlenを使う方法は思いついたのですが、このコードは思い浮かびませんでした。 ありがとうございました。 ちなみにlen(j)==1の1は[]のことを表しており、 j[0] == "[]"はリストjのインデックス[0]に[]が来た場合、という捉え方で大丈夫でしょうか?
y_shinoda

2020/07/15 11:35

len(j) == 1 の 1 は、「list 型の変数 j が持つ要素の数が 1 個であること」を期待しています j[0] == "[]" は、その通りです
退会済みユーザー

退会済みユーザー

2020/07/15 11:39

なるほど。[]も要素の一つとして捉えてるわけですね! とてもわかりやすかったです。ありがとうございました。
y_shinoda

2020/07/15 11:45

> なるほど。[]も要素の一つとして捉えてるわけですね! なぜかというと、変数 array に append() されている 変数 value は 「文字列型の要素を持つ list 型」です なので、 for 文で変数 array から取り出した 変数 j もまた、 「文字列型の要素を持つ list 型」になっています for ブロックの最初で print(j) をしてみると、 j にどのような値が格納されているか確認できるので、ぜひやってみてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問