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

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

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

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

Python

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

Q&A

2回答

273閲覧

コードの修正(改善)をして頂きたいです。

masac225

総合スコア17

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/01/31 06:18

昨日Python(3.7.2)を始めたばかりの超初心者です。
現在持ち合わせている数少ない知識でBMI測定システムを作ってみているのですが、なかなか作りたいものが作れません。
つたないコードですが、こちらのコードの方を下記の条件(機能)のもと修正、及び改善していただけると幸いです(投げやりなものになってしまい大変申し訳ございません)。

コード

Python

1#BMI Checker 2while 1: 3 try: 4 print("Which system do you use?:",end="\n") 5 system = int(input("1. The metric system (kg & cm), 2. Imperial units (lbs & inch): ")) 6 if system == 1 or system == 2: 7 print("Let's get started!") 8 break 9 except: 10 continue 11 print("\n",system,"is an invalid value (it must be 1 or 2), try again!") 12 13if system == 1: 14 weight = int(input("Please input your weight in integer (kg): ")) 15 hight = int(input("Please input your height in integer (cm): ")) 16 BMI = weight / (hight / 100) ** 2 17else: 18 weight = int(input("Please input your weight in integer (lbs): ")) 19 hight = int(input("Please input your height in integer (in): ")) 20 BMI = weight / ((hight ** 2) * 703) 21 22print("Your BMI is:", round(BMI,1)) 23 24if BMI < 18.5: 25 print("It seems too low. You need to gain weight.") 26elif 18.5 <= BMI <= 24.9: 27 print("It seems pretty average. You are healthy!") 28elif 25 <= BMI <= 25: 29 print("It seems a little too high. You need some exercise.") 30else: 31 print("It seems too high. You need to lose weight.")

現在搭載している機能

  • 方式選択(メートル法 or ヤード・ポンド法)
  • 1.に応じた体重・身長入力フォーム
  • 1.に応じたBMI計算(方式によって計算方法が異なるため)
  • BMI表示
  • BMIの算出結果に合わせたメッセージ

今後搭載したい機能

  • 方式選択において、入力された値が 1 か 2 か判定し、もしもそれ以外であれば再度入力させる
  • 体重・身長において、入力された値が整数かどうか判定し、もしも整数でなければ再度入力させる

このコードの問題点

  • 方式選択の時に文字(str型?)を入力すると11行目の部分が反応しない。

11 | print("\n",system,"is an invalid value (it must be 1 or 2), try again!")


(例)

  1. The metric system (kg & cm), 2. Imperial units (lbs & inch): 31

31 is an invalid value (it must be 1 or 2), try again!
Which system do you use?:

  1. The metric system (kg & cm), 2. Imperial units (lbs & inch): fa

Which system do you use?:

  1. The metric system (kg & cm), 2. Imperial units (lbs & inch):

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

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

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

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

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

guest

回答2

0

方式選択の時に文字(str型?)を入力すると11行目の部分が反応しない。

int() 関数で入力された文字列を数値に変換しようとした際、数字以外の場合は数値に変換できないため、例外が発生します。
そして except で補足され、continue するので、その下の

print("\n",system,"is an invalid value (it must be 1 or 2), try again!")

は実行されません。
continue の代わりに pass にしておけばいいのではないでしょうか?

体重・身長において、入力された値が整数かどうか判定し、もしも整数でなければ再度入力させる

文字列が数値かどうかを判定するには、以下の方法がベストです。

try: val = int(text) except ValueError: print("not integer")

上記2つを参考に変更してみてください。

投稿2019/01/31 06:33

編集2019/01/31 06:34
tiitoi

総合スコア21956

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

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

0

コードを作成してくださいという依頼には答えられませんので、現状の問題点のみにアドバイスします。

このコードの問題点

方式選択の時に文字(str型?)を入力すると11行目の部分が反応しない。

except: continue

こちらのそれぞれの行の意味について調べるとわかると思います。

投稿2019/01/31 06:33

編集2019/01/31 06:34
ozwind918

総合スコア1140

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問