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

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

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

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

Q&A

解決済

1回答

731閲覧

python/リストのパラメータ内に入力値があるかどうか検出したい

pystudent

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/05/02 05:57

編集2020/05/02 06:41

前提・実現したいこと

Pythonでリスト内のパラメータに値が入力されているかどうかを確認するプログラムを作成しているのですが、うまく機能しません。

data=[[a,b,c,d], [a,b,c,d], [a,b,c,d]...]
という4つのパラメータが入っているリストがあります。
各パラメータに値が何も入力されていない場合(例a = "")には、"No data."と返したいです。

発生している問題・エラーメッセージ

一番最初のdata[0][0]に何も値が入っていないことは検出されるのですが、その後data[0][1]~に値が入っていない場合にきちんと検出されません。また、各a-dに対して値が入力されてないことが判明した時点でエラーメッセージ"No data."を表示したいのですが、現時点では、a-bまでのinput入力が完了した後にしかメッセージが表示されません。

該当のソースコード

data = [] a = input("a: ") b = input("b: ") c = input("c: ") d = input("d: ") data.append([a,b,c,d]) dataValidation = True i = 0 h = 0 for i in range(0, len(data)): for h in range(0,4): if data[i][h] == "": print("No data.") h += 1 break else: i += 1 dataValidation = False

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

IDLE/Python3.8.2

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

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

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

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

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

meg_

2020/05/02 06:18

コードは「コードの挿入」で記入してください。
otn

2020/05/02 06:19

「入ってる」「入ってない」がプログラム的にどういう意味かを明確にする必要があります。
meg_

2020/05/02 07:35

「各パラメータに値が何も入力されていない場合」とは例えばdata[0]が['','','','']ということですか?
pystudent

2020/05/02 07:48

説明不足ですみません。例えば、data[0]=["", "b","c","d"]や["a", "b","","d"]です。input関数によるデータ入力が実行されるたびにデータが入っているかチェックをするループの作成を試みています。
meg_

2020/05/02 07:49

違うみたいですね。「各a-dに対して値が入力されてないことが判明した時点でエラーメッセージ"No data."を表示したい」が目的でしょうか?であれば、input()の直後にチェックすれば良いのではないでしょうか?
pystudent

2020/05/02 08:00

input()が4つあるので、直後にチェック文を入れるとなると4回同じチェックコードをa,b,c,dに対して記入することになりませんでしょうか?
meg_

2020/05/02 08:24

ループ処理で4回空文字以外の文字を入力させれば良いのでは?
pystudent

2020/05/02 09:44

度々アドバイスいただきありがとうございます。少し前にいただいた「input()の直後にチェックすれば良いのではないでしょうか?」というコメントを考慮し、プログラムを修正してみました。少し繰り返しになるもの、前よりは複雑ではないので、このまま進めたいと思います。大変ありがとうございました。
guest

回答1

0

ベストアンサー

次のコードを研究してみてください。

python3

1a = input("a: ") 2b = input("b: ") 3c = input("c: ") 4d = input("d: ") 5data = [a, b, c, d] 6 7for x in data: 8 if x == '' or x is None: 9 print("No data.") 10 break

追記:
imput したら、すぐに チェックをするようにする版も作ってみました。

python3

1def my_input(message): 2 v = input(message) 3 if v == '' or v is None: 4 print("No data.") 5 raise ValueError 6 return v 7 8data = [] 9try: 10 data.append(my_input("a: ")) 11 data.append(my_input("b: ")) 12 data.append(my_input("c: ")) 13 data.append(my_input("d: ")) 14except ValueError: 15 pass 16print(data)

空デーアが入力された後にどうするかに従って、コードは変更が必要です。
↑では、 その時点で入力を停止し、それまでの入力値を print するようにしています。

投稿2020/05/04 23:45

編集2020/05/05 04:45
katoy

総合スコア22324

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

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

pystudent

2020/05/05 02:41

ご回答いただきまして大変ありがとうございます。もしaを入力した時点でデータがなく"No data"と表示したい場合はどうすればよいでしょうか。
katoy

2020/05/05 04:45

回答に追記しました。
pystudent

2020/05/05 05:34

具体的なコード例を記載していただきまして大変ありがとうございます。ずっと悩んでいて自分ではアイディアが思いつきませんでしたのでとてもありがたいです。こちらの例を参考に、自分のコードに適用させていただきたいと思います。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問