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

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

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

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

Q&A

解決済

2回答

545閲覧

python 初めてプログラム文を作成しました 上手く稼働しません。

syouzou1223

総合スコア1

Python

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

0グッド

0クリップ

投稿2022/11/13 05:39

前提

python で以下のプログラミングをしました。
(私自身初めてpythonを使用しています。)
①画面に'Your score'と表示されます。
②キーボードから点数を入力します。
③入力された点数により、
0~40以下  ’Grade1’
41~70以下  ’Grade2’
71~100以下 ’Grade3’ 
また、100を超える数字と、マイナスの数字が入力された場合は、
’error1’と’error’ を表示させたい。
④「elif」は使用しない。

子供(高校生)の課題を手伝っています。
④のついては、まだ学習していないため、使用しません。            

実現したいこと

以下の数値を入力した時に、想定した結果となるようにしたい。
70~100を入力(例えば80) → 'Grade3'
100を超える(例えば120) → ’error1’

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

以下の数値を入力すると、想定した結果とならない。
70~100を入力(例えば80) → 'error1'
100を超える(例えば120) → ’Grade1’

該当のソースコード

python

1score=0 2score=input('Your score?') 3if score >= '0': 4 if score <= '40': 5 print('Grade1') 6 else: 7 if '40' < score <= '70': 8 print('Grade2') 9 else: 10 if '70' < score <= '100': 11 print('Grade3') 12 else: 13 if score > '100': 14 print('error1') 15else: 16 print('error') 17

試したこと

if文(else)の個数が多いので、うまく走らないのではないか
と考え、if文を少なくするよう3行目を以下のように変更しました
変更前 if score >= '0':
変更後 if ’0’ <= score <= '100': (変更前の12~14行目が無くなるように)
すると、入力値の結果は、全て'error'となりました。

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

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

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

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

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

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

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

somak

2022/11/13 05:47

scoreをint型にし、条件式の数値もint型にしてみたらどうですか?
guest

回答2

0

ベストアンサー

他の方と同じようなことですがちゃんと説明してみます。

pythonに限らず、プログラミング言語では、文字列と数値は別のものです。 "1" と 1 は違うのです。
文字列は、数字だけでなく平仮名などの文字を扱うことができ、人とプログラムがやりとりするのによく使われます。
数値は、加減乗除や比較したりなどの計算をすることで何かを行ないます。

今回、点数を比較して判断をしなければなりませんので、数値を使って計算する必要があります。
ところが、

python

1score=input('Your score?')

のinput関数で取得できるのは、必ず文字列なのです。 これでは比較ができませんが、数値を表す文字列("42"とか)を、対応する数値に変換することができます。 それが int() です。丁寧に書くとこんな風になります。

python

1score_string=input('Your score?') 2score = int(score_string)

いっきに書くこともできます。

python

1score=int(input('Your score?'))

あとは、比較の演算を文字列ではなく、以下のように数値で行なえばよいのです。

python

1if score >= 0:

投稿2022/11/13 07:13

TakaiY

総合スコア12781

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

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

syouzou1223

2022/11/13 09:17

ありがとうございました。解決しました。親の面目が保てました。
guest

0

2パターン用意してみました。

python

1# ほぼ全部if。条件に一致したらreturnで関数を終了。以降の行は実行されない 2def get_grade(): 3 # 入力された文字列としての数字を、int型に変換 4 score = int(input('Your score?')) 5 6 if score < 0: 7 print('error') 8 return 9 if score <= 40: 10 print('Grade1') 11 return 12 if score <= 70: 13 print('Grade2') 14 return 15 if score <= 100: 16 print('Grade3') 17 return 18 else: 19 print('error1') 20 21get_grade()

python

1# リストを利用した変わった方法 2def get_grade_2(): 3 # 入力された文字列としての数字を、int型に変換 4 score = int(input('Your score?')) 5 print(['error', 'Grade1', 'Grade2', 'Grade3', 'error1'][(score > 100) + (score > 70) + (score > 40) + (score >= 0)]) 6 7get_grade_2();

投稿2022/11/13 06:33

編集2022/11/13 06:49
Cocode

総合スコア2314

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問