🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

1031閲覧

while loopの問題について

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/03/24 17:05

編集2021/03/25 04:50

python

1cnt = 0 2g = 0 3grade = [] 4while(1): 5 cnt += 1 6 g = int(input('Enter grade '+str(cnt) + ': ')) 7 if g==-1: 8 break 9 else: 10 grade.append 11 12 13 14 15avg = sum(grade)/len(grade) 16print('Average :' + str(avg)) 17 18 19if 90 <= avg: 20 grade = 'A++' 21elif 80 <= avg: 22 grade = 'A+' 23elif 70 <= avg: 24 grade = 'A' 25elif 60 <= avg: 26 grade = 'B' 27elif 50 <= avg: 28 grade = 'C' 29elif 40 <= avg: 30 grade = 'D' 31elif 33 <= avg: 32 grade = 'F+' 33elif 20 <= avg: 34 grade = 'F' 35else: 36 grade = 'FF' 37print ('Your grade is:{} '.format(avg)) 38

この問題をうまく作りたいのですがどこを変えたらいいでしょうか??
エラーでますよとか実行すればわかるこというのやめてください。
単純に解決策を探しているのでわからない方は回答しないでください。

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

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

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

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

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

miyabi_takatsuk

2021/03/25 02:14

エラーがでているのでしょうか? エラー文も記載お願いします。
退会済みユーザー

退会済みユーザー

2021/03/25 04:27

Enter grade 1: 80 Enter grade 2: 80 Enter grade 3: 9 Enter grade 4: -1 Traceback (most recent call last): File "/Users/aya/Documents/new practice file.py", line 766, in <module> avg = sum(grade)/len(grade) ZeroDivisionError: division by zero >>> とこのような形になります。本来はマイナスのあたいを入力したのちそれまでの平均値を出し、その平均値がどのグレードに当てはまるのかを示さなければならないのですが。 よろしくお願いいたします。
miyabi_takatsuk

2021/03/25 04:43 編集

エラーを翻訳にかけると、 > トレースバック(最後の最後の呼び出し): <module>内のファイル "/ Users / aya / Documents / new Practice file.py"、行766 avg = sum(grade)/ len(grade) ZeroDivisionError:ゼロによる除算 となります。 つまり、0に対して除算しちゃってるからエラーだよ と言われています。 while文内の、 grade.appendは、中身を何も追加していないようですが、 どんな値を入れるのでしょうか? gradeリストに何も入っていないため、 len(grade)が0となり、その行の計算が失敗しているのかと。
退会済みユーザー

退会済みユーザー

2021/03/25 04:37

エラーって翻訳にかけられるんですか!?初めて知りました。 グレードのところは下の部分にあるif 文をいれるつもりで書いてみたのですが、違うのですね。ご丁寧にありがとうございます。再度書いてみます。
miyabi_takatsuk

2021/03/25 04:42

Google翻訳です。 日本語に直すと、だいたいのエラーはよりわかりやすくなります。 if文を直接入れることはできません。 appendメソッドは、 リスト変数に対して、値を追加するメソッドです。 list.append(なんらかの値) というふうに使います。 つまり、()で実行していない時点で、間違った使い方をしているということです。
退会済みユーザー

退会済みユーザー

2021/03/25 04:48

なるほど。それではどのようにアプローチするのがいいのでしょうか? 今ある自分の知識ではまったくおもいつきません。。。。 .appendをなくした方がいいのでしょうか?それともbreak らへんが違うのでしょうか?
miyabi_takatsuk

2021/03/25 04:55

どのようなアプローチがいいかなんて、第三者の私にはわかりません。 なぜなら、どのような実装をしたいか、が質問本文に記載されていないからです。 要件次第では、全然違う構文の方がいい可能性すらあります。 要件を定義し、質問本文に記載して下さい。
guest

回答2

0

エラーでますよとか実行すればわかるこというのやめてください。

ならまず実行してみましょう。なにがおきますか?

投稿2021/03/24 21:59

y_waiwai

総合スコア88038

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

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

退会済みユーザー

退会済みユーザー

2021/03/25 00:06

エラーが起きますw爆笑
y_waiwai

2021/03/25 01:05

エラーが起きるなら、そのエラーメッセージを読みましょう そして、どういうエラーなのかを理解することです で、それについて他人に聞きたいのであれば、あなたがやったこと、そしてそこで何が起きたかをすべて提示しましょう。
退会済みユーザー

退会済みユーザー

2021/03/25 04:31

エラーメッセージをよんでわかるほどパイソンをまだやっていないのでわかりません。できればでいいのですが私の質問にあなたに回答して欲しくないです。初心者ですが自分なりに頑張ろうとしてるので、あなたにとって当たり前でも私にとってはそうではありません。では
y_waiwai

2021/03/25 04:34

残念ながら、あなたがどう思おうと、回答したいところに回答していきます それが嫌ならあなたのほうが退場しましょう
退会済みユーザー

退会済みユーザー

2021/03/25 04:38

あ、はい。
guest

0

ベストアンサー

※構文を見てみての、おそらくこういうことがしたいのだろう、というエスパー回答なので、ご了承ください。

今回の実装では、回数制限を設けない、while構文は不適切でしょう。

なぜなら、数値ではない値、もしくは-1が入力されない限り、
ループが止まらないからです。
また、gradeリスト変数に、値が入っているかも確認する必要があります。
(値が入っていないため、エラーが起きる)
回数を決めた上で、grade変数の値があるかも確認すると、下記のようになるでしょう。

python

1# cnt = 0 # 以降で使わない、ループ内の定義で十分なため、ここでの定義は必要ない 2# g = 0 # 上記と同様 3 4grade = [] 5 6# 今回の実装は回数を決めた方がいい 7for i in range(20): 8 cnt = i + 1 9 g = int(input('Enter grade ' + str(cnt) + ': ')) 10 if g == -1: 11 break 12 else: 13 # gradeに、gを入れてください 14 grade.append(g) 15 16if len(grade) > 0: 17 avg = sum(grade) / len(grade) 18 print('Average :' + str(avg)) 19 20 result = "" 21 if 90 <= avg: 22 # 変数を壊す代入は避けた方がいい 23 # grade = 'A++' 24 result = 'A++' 25 elif 80 <= avg: 26 result = 'A+' 27 elif 70 <= avg: 28 result = 'A' 29 elif 60 <= avg: 30 result = 'B' 31 elif 50 <= avg: 32 result = 'C' 33 elif 40 <= avg: 34 result = 'D' 35 elif 33 <= avg: 36 result = 'F+' 37 elif 20 <= avg: 38 result = 'F' 39 else: 40 result = 'FF' 41 42 print ('Your grade is:{} '.format(avg)) 43 44else: 45 # 値が入っていないので、そう表示 46 print("None Values") 47 48

投稿2021/03/25 05:51

miyabi_takatsuk

総合スコア9555

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

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

退会済みユーザー

退会済みユーザー

2021/03/25 10:38

まるでエスパーですね!!ありがとうございます。 とりあえずfor分でもう一度復習してみてそのあとwhileにチャレンジしてみようと思います!ありがとうございました。
miyabi_takatsuk

2021/03/25 10:45

whileの使い所、を勉強されるとよいかと。 whileは基本的に、”何回処理するかわからない”って時に用います。 今回のものでは、回数が決まってないと破綻する要件だとお見受けします。 なので、forで処理するのが適切です。
miyabi_takatsuk

2021/03/25 10:50

あとは、「要件定義」をできるようになってください。 どのような実装をしたいのか、という明確なものを自身で定義していくことです。 過去質問を拝見いたしましたが、 どうにも、要件定義がされていない、自分で作りたいものの質問をしているはずなのに、 人にその仕様を考えることも要求している、といった質問が目立ちましたので。 今回の場合は、コメントの最後で「どのようなアプローチがいいか」と聞かれたのが該当します。 そこは、第三者でどうにかできる部分ではありません。
退会済みユーザー

退会済みユーザー

2021/03/25 10:51

なるほど、この問題がwhileを学ぶところのセクションにあったのでwhileで解こうと思っていたのですがそうとも限らないようですね。どちらを使うべきか判断できるようになれるようがんばります。 ありがとうございます。
miyabi_takatsuk

2021/03/25 10:57

> この問題がwhileを学ぶところのセクションにあったので それこそ、第三者が知り得ない事情なので・・・。 問題文なども総合的にみないと判断がつきません。 とかく、情報は、なるたけ全て質問本文に記載するようにされるとよいかと。 そうしていけば、自ずと、質問への低評価も減るかと思います。 ただし、問題や課題の場合は、そうだと書いてしまうと、 よっぽど突き詰めた質問でないと、(やってみたがどうしてもわからない、って突き詰めないと) 「課題とかなら自分でやれよ」と突っぱねられます。teratailだと。
退会済みユーザー

退会済みユーザー

2021/03/25 11:00

なるほど。今日始めたばかりであまりよくわからず。。。。どこまでが質問の丸投げなのか。。。とか ある程度自分でもコードを書いているのにまるなげになるんですねw 学びますwww 無料なので民度が低いのは仕方ないですよね。 今日は自分のいつものメンターさんが忙しくこちらを初めてみたのです(^◇^) miyabiさんの丁寧な回答に救われました。 ありがとうございます。
miyabi_takatsuk

2021/03/25 11:19 編集

どこまでも、原因は自分にあるのでは?と真摯に受け止める方がよいかと。 民度が低いのではなく、 単純に「あくまで赤の他人にできる範囲」と線引きをしているだけだと思いますよ。みなさん。 最新の質問二つは、要件定義や、自分はここまでやって、わかって、どこがわからないかを、明示しており、 回答つきやすくなっているとお見受けします。 質問の仕方いかんで、人の反応は変わっていくと思います。 どうか頑張って。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問