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

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

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

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

Q&A

解決済

2回答

1280閲覧

Python3  条件分岐 リスト 筋トレアプリ作成

python3_beginer

総合スコア46

Python 3.x

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

0グッド

1クリップ

投稿2018/04/21 14:45

目標)

体重とベンチプレスの重量を入力すると

筋トレのレベルが分かるアプリをつくりたい

イメージ説明

まずは、上の写真の赤枠のリストを作成し、機能をつくってみた

コード body_weight = input("What is your body weight? ") data = [ ['67', '50', '65.0', '77.5', '107.5', '132.5'], ['75', '55.0', '65.0', '77.5', '107.5', '132.5'] ] for x in range(2): if body_weight == str(data[x][0]): bench_press = input("Enter your bench press kg, please") else: print("No data") for x in range(2): if bench_press == data[x][1]: print("Untrained") elif bench_press == data[x][2]: print("Novice") elif bench_press == data[x][3]: print("Intermediate") elif bench_press == data[x][4]: print("Advance") elif bench_press == data[x][5]: print("Elite") else: print("No data") 出力値 What is your body weight? 67 Enter your bench press kg, please 50 No data Untrained No data 期待値 What is your body weight? 67 Enter your bench press kg, please 50 Untrained

https://trinket.io/python/33e5c3b81b

#質問

なぜ No data と出力されるのかが分からないです。

原因が分かる方がいらっしゃれば教えて頂きたいです。

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

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

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

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

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

guest

回答2

0

まず1つ目のNo dataはここで出てて、

python

1for x in range(2): 2 if body_weight == str(data[x][0]): 3 bench_press = input("Enter your bench press kg, please") 4 else: 5 print("No data")

入力が終わってもループが回りっぱなしだからですね。サンプルの入力だとdata[0][0]で条件がTrueになるのでそこでinputが動き、data[1][0]は条件を満たさないのでprint("No data")が動きます。

2つ目のNo dataはここで、

python

1for x in range(2): 2 if bench_press == data[x][1]: 3 print("Untrained") 4 elif bench_press == data[x][2]: 5 print("Novice") 6 elif bench_press == data[x][3]: 7 print("Intermediate") 8 elif bench_press == data[x][4]: 9 print("Advance") 10 elif bench_press == data[x][5]: 11 print("Elite") 12 else: 13 print("No data")

基本的には同様の話ですね。data[0][1]で条件を満たし、print("Untrained")が実行されます。ここまでは良いけど、ループはもう一回回り、今度は満たされる条件がないのでprint("No data")が実行されます。

追記

書いてみました。

python

1from collections import defaultdict 2 3data_list = [["50", "65.0", "77.5", "107.5", "132.5"], 4 ["55.0", "65.0", "77.5", "107.5", "132.5"]] 5rank_list = ["Untrained", "Novice", "Intermediate", "Advance", "Elite"] 6data = {"67": 7 defaultdict(lambda : "No data", 8 dict(zip(data_list[0], rank_list))), 9 "75": 10 defaultdict(lambda : "No data", 11 dict(zip(data_list[1], rank_list)))} 12 13body_weight = input("What is your body weight? ") 14 15if body_weight in data: 16 bench_press = input("Enter your bench press kg, please ") 17 print(data[body_weight][bench_press]) 18else: 19 print("No data")

pythonにはswitch文がありませんが、辞書を使うとそれに近いことができます。

投稿2018/04/21 15:17

編集2018/04/21 15:34
hayataka2049

総合スコア30933

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

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

python3_beginer

2018/04/22 10:19

お返事ありがとうございます。 不要な繰り返しをしていたのですね。説明のおかげでスッキリしました。 辞書を使うやり方はいいですね! いつもは、練習問題ばかりだったので作ってみたいものにチャレンジしてみました。 ゼロベースだと簡単なところでつまづいちゃいますね。 ご指導ありがとうございます。
guest

0

ベストアンサー

このプログラムは、次のように書いているのと同じになります。

Python

1if body_weight == str(data[0][0]): 2 bench_press = input("Enter your bench press kg, please") 3else: 4 print("No data") 5 6if body_weight == str(data[1][0]): 7 bench_press = input("Enter your bench press kg, please") 8else: 9 print("No data") 10 11if bench_press == data[0][1]: 12 print("Untrained") 13elif bench_press == data[0][2]: 14 print("Novice") 15elif bench_press == data[0][3]: 16 print("Intermediate") 17elif bench_press == data[0][4]: 18 print("Advance") 19elif bench_press == data[0][5]: 20 print("Elite") 21else: 22 print("No data") 23 24if bench_press == data[1][1]: 25 print("Untrained") 26elif bench_press == data[1][2]: 27 print("Novice") 28elif bench_press == data[1][3]: 29 print("Intermediate") 30elif bench_press == data[1][4]: 31 print("Advance") 32elif bench_press == data[1][5]: 33 print("Elite") 34else: 35 print("No data")

なぜご提示のような出力になるのか、お分かりいただけるでしょうか。

修正するなら

現状のコードをある程度保ったまま修正すると、次のような感じです。

Python

1for x in range(2): 2 if body_weight == str(data[x][0]): 3 bench_press = input("Enter your bench press kg, please") 4 break 5else: 6 print("No data") 7 8if bench_press == data[x][1]: 9 print("Untrained") 10elif bench_press == data[x][2]: 11 print("Novice") 12elif bench_press == data[x][3]: 13 print("Intermediate") 14elif bench_press == data[x][4]: 15 print("Advance") 16elif bench_press == data[x][5]: 17 print("Elite") 18else: 19 print("No data")

Wandbox

投稿2018/04/21 14:56

LouiS0616

総合スコア35660

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

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

python3_beginer

2018/04/22 10:17

お返事ありがとうございます。 不要な繰り返しをしていたのですね。説明のおかげでスッキリしました。 いつもは、練習問題ばかりだったので作ってみたいものにチャレンジしてみました。 ゼロベースだと簡単なところでつまづいちゃいますね。 ご連絡ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問