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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python 3.x

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

Q&A

解決済

4回答

603閲覧

if文でエラーを生じておりますが、理由が分かりません。

papapawpaw

総合スコア7

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python 3.x

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

0グッド

0クリップ

投稿2020/03/18 14:17

前提・実現したいこと

使用している言語は、python 3.8.2で、listにある点数から点数をランダムに選び、その点数が80点以上だと「合格です。次も頑張ろう。」と表示して、80点未満なら、「不合格です」と表示するようななシステムを作っています。
しかし、次のようなエラーメッセジが表示されました。

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

あなたの点数は60点です。
Traceback (most recent call last):
File "/Users/leeminjae/Documents/if文.py", line 4, in <module>
if random.choice(score)>=80:
TypeError: '>=' not supported between instances of 'str' and 'int'

該当のソースコード

import random
score=["100","70","60","90","80"]
print("あなたの点数は"+random.choice(score)+"点です。")
if random.choice(score)>=80:
print("合格です。"+"\n"+"次も頑張ろう。")
else:
print("不合格です。")

言語名 python 3.8.2

randomで間違っているのかを確かめるために、3行目に
「print("あなたの点数は"+random.choice(score)+"点です。")」をつけ加えましてうまく表示しました。しかし、その後はエラーが表示されます。

pyhon初心者で分からないところがたくさんありますが、よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

数字列と数値を比較しているのが直接的な問題です。

Python

1>>> "100" >= 80 2Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4TypeError: '>=' not supported between instances of 'str' and 'int'

そもそもスコアは数値なのですから、出力の際だけ文字列にしてやれば良いのでは。

Python

1# リストの名前は複数形にすると分かり良いです。 2# 本当は score_candidates とかが適当なのでしょうけど、長いのでここでは scores で。 3scores = [100, 70, 60, 90, 80] 4 5# ここは単に score で良い気がしますが、元のコードと被るのでちょっと冗長な命名にしています。 6your_score = random.choice(scores) 7 8print("あなたの点数は" + str(your_score) + "点です。") 9# print(f"あなたの点数は{your_score}点です。") でも可

比較の際だけ数値化しても意図通りに動作するでしょうが、場当たり的な印象を受けます。


また、random.choiceの使い方を間違えて居ます。
乱数は毎度違う値に成り得ますから、同じ結果を使いまわすなら変数に値を保持する必要があります。

ダメな例

Python

1scores = [100, 70, 60, 90, 80] 2 3print("あなたの点数は" + str(random.choice(scores)) + "点です。") 4print("もう一度言います、") 5print("あなたの点数は" + str(random.choice(scores)) + "点です。")

問題無い例

Python

1scores = [100, 70, 60, 90, 80] 2your_score = random.choice(scores) 3 4print("あなたの点数は" + str(your_score) + "点です。") 5print("もう一度言います、") 6print("あなたの点数は" + str(your_score) + "点です。")

実際に何回か試してみて下さい。

コードの貼り方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
Python

特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2020/03/18 14:49

編集2020/03/18 14:57
LouiS0616

総合スコア35668

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

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

0

python

1import random 2score=["100","70","60","90","80"] 3print("あなたの点数は"+random.choice(score)+"点です。") 4if int(random.choice(score))>=80: 5 print("合格です。"+"\n"+"次も頑張ろう。") 6else: 7 print("不合格です。")

また、エラー内容としては、int型とstr型の比較ができない。というものです。
scoreでダブルクオーテーションでリストを取っています。
ダブルクオーテーションで囲ってしまうと、文字列(str型)として判定されてしまいます。
ランダムチョイスされたものをint変換をかけてみました。

投稿2020/03/18 14:26

編集2020/03/18 14:31
chokokorone333

総合スコア32

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

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

papapawpaw

2020/03/18 15:16

教えてくださりありがとうございます。これからはstr型とint型をより意識していこうと思います。本当にありがとうございます。これからもよろしくお願いします。
guest

0

Pythonではインデントでifなどの制御ブロックを判別します。
ifのあとにインデントを入れてください。
また、比較対象をintに変換してください。

script.py

1import random 2score=["100","70","60","90","80"] 3print("あなたの点数は"+random.choice(score)+"点です。") 4if int(random.choice(score)) >=80: 5 print("合格です。"+"\n"+"次も頑張ろう。") 6else: 7 print("不合格です。")

投稿2020/03/18 14:25

編集2020/03/18 14:27
takeaship

総合スコア129

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

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

papapawpaw

2020/03/18 15:11

教えていただき、ありがとうございます。インデントという初歩的なところができていなかったのにもかかわらず、暖かい目で指導してくださりありがとうございます。""のような文字列を使うときはintのことも気をつけます。これからもよろしくお願いします。
guest

0

scoreのtype(つまり、変数の型)が'str'(文字列)なので、
「文字列と80という数字の大小は比較できません!」とエラーが出ています。

if random.choice(score)>=80: をif int(random.choice(score))>=80とすればよいと思います!

投稿2020/03/18 14:24

Matsui_hero

総合スコア346

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

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

papapawpaw

2020/03/18 15:08

教えていただきありがとうございます。どうしても"  "を文字列であったことを忘れていました。今後は、文字列に気をつけながら、intを活用していきたいです。
papapawpaw

2020/03/18 15:09

これからもよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問