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

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

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

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

Q&A

解決済

2回答

5847閲覧

python input関数の再入力

s_kj

総合スコア32

Python 3.x

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

1グッド

1クリップ

投稿2020/05/10 04:49

編集2020/05/10 06:29

前提・実現したいこと

input関数で、指定した文字列以外の場合が入力された場合、再入力を指定したい。
20以上の入力項目をリスト化したい。
その20以上の要素は各番号が振られているので、入力はループ処理で対応したい。

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

input関数に代入する要素が、ループに反映できません。
*表示されるのは、常に1番目の要素になってしまいます。

該当のソースコード

#配列の内容を仮作成する A = [1, 2, 3] B = [11, 12, 13] num = 0 while num in range(3): A_input = input('Aの1番目の要素を記入してください:') B_input = input('Bの1番目の要素の種類を記入してください:') if A_input == 'X' or A_input == 'Y': if B_input == 'Z' or B_input == 'V': A[num] = B_input B[num] = A_input num += 1 else: print('Bの1番目の要素にはZ、Vのいずれかを記入してください。') else: print('Aの1番目の要素にはX、Yのいずれかを記入してください。') print('入力した配列は', A, 'です。') print('入力した配列は', B, 'です。')
python3

試したこと

forやwhileでループ表記しようとしましたが、input関数の中身が文字列表記のためループの内容に対応できませんした。

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

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

DrqYuto👍を押しています

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

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

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

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

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

y_waiwai

2020/05/10 04:59

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
s_kj

2020/05/10 06:30

y_waiwai様 コードを記載しました。 可能でしたら、コメントお願いいたします。
guest

回答2

0

whileなどで、input関数以降をループの中に入れ、正常に入力させた場合にループを抜けるような処理を書きましょう

#コードが読めないのでここまで

投稿2020/05/10 05:13

y_waiwai

総合スコア88042

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

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

s_kj

2020/05/10 05:55

ご回答ありがとうございます。 whileを使用すればいいということがわかることで、大変助かります。 そもそもどの構文が適していたのかもわかりませんでしたので。。。
guest

0

ベストアンサー

コードを見ると、先頭と最後の部分と真ん中の処理が食い違っているのでなにをしたいのか今一つわからないのですが、真ん中の処理のところだけ見て、沢山入れなければならないとしたらこう作るだろうというものを書いてみました。

他にもいろいろなやりかたがあると思いますよ。
参考になれば。

python

1def check_a(inp): 2 if inp in ['X', 'Y']: 3 return True, None 4 else: 5 return False, 'Aの1番目の要素にはX、Yのいずれかを記入してください。' 6 7 8def check_b(inp): 9 if inp in ['Z', 'V']: 10 return True, None 11 else: 12 return False, 'Bの1番目の要素にはZ、Vのいずれかを記入してください。' 13 14 15input_list = [ 16 {'value': None, 17 'message': 'Aの1番目の要素を記入してください:', 18 'check_func': check_a }, 19 {'value': None, 20 'message': 'Bの1番目の要素を記入してください:', 21 'check_func': check_b } 22] 23 24for item in input_list: 25 res = False 26 while res == False: 27 user_input = input(item['message']) 28 result, err_msg = item['check_func'](user_input) 29 if result: 30 item['value'] = user_input 31 break 32 else: 33 print(err_msg)

値のチェック用にそれぞれ関数を作っていますが、もしこの可能な値をリストで判定する方式のものしかないのであれば、リストとエラーメッセージを保持するようにすればいいので、処理まもっと簡単になります。

投稿2020/05/10 07:42

TakaiY

総合スコア13790

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問