1

私は本当に困惑しています。私は私の先生 (私は Python 3 を使用しています) のためにプログラムを書いています。私は初心者なので、答えを簡単にしてください:D

さて、ここで問題です。コードに必要なすべての入力があります。入力はこのように機能します。A = 5 B = 4 C = 3 D = 2 E = 1. ストレート A を取得した場合、50 ポイントを取得しますが、35 ポイントなどの結果になると、すべての成績計算がクラッシュします。>30 の場合は B ですが、>20 の場合は C ですが、>20 と >30 は同時に印刷されます。結果が30より大きい場合は両方とも実行されるため、31から40の場合は「B」と表示されるようにする方法がわかりません。

これがコードです

a = eval(input())
b = eval(input())
c = eval(input())
d = eval(input())
e = eval(input())
f = eval(input())
g = eval(input())
h = eval(input())
i = eval(input())
j = eval(input())

average = a + b + c + d + e + f + g + h + i + j
print(average)

if average >41:
    print(" Grade A ")

if average >31: 
    print(" Grade B")

if average >21:
    print(" Grade C")

if average >11 :
    print(" Grade D")

if average >0 
    print(" Grade E")

どんな助けでも大歓迎です!ありがとう。

4

2 に答える 2

5

目的を達成するための最良の方法は、データのグループを定義することです。if/elifブロックは機能しますが、見栄えが悪く、多くの余分な入力が必要です。

import sys

mark_boundaries = [("A", 41), ("B", 31), ("C", 21), ("D", 11), ("C", 0)]

try:
    marks = []
    for i in range(10):
        marks.append(int(input()))
except ValueError:
    print("You entered an invalid mark, it must be a number.")
    sys.exit(1)

average = sum(marks) #I'd just like to note the misleading variable name here.
#average = sum(marks)/len(marks) #This would be the actual average mark.
print(average)

for mark, boundary in mark_boundaries:
    if average >= boundary:
        print("Grade "+mark)
        break #We only want to print out the best grade they got.

ここでは、タプルのリストを使用して境界を定義します。高いものから低いものへとチェックし、一致する場合はブレイクアウトします (したがって、低いスコアに「落ちる」ことはありません)。

同様に、ループを使用してマークのデータを収集したことがわかります。プログラミング中に非効率的な方法で何かを行っているという良い兆候は、コードの一部をコピーして貼り付けた (または何度も入力した) ことです。これは通常、ループに入れるか、関数にする必要があることを意味します。ユーザーが望むものを実行できないため、より安全なオプションであるint(input())ではなくも使用しました。また、ユーザーが数値ではないものを入力した場合に例外eval(input())を適切にキャッチすることもできます。ValueError

進取の気性に富む個人は、ペア タプルのリストを見て、 adictが適切な代替になると考えるかもしれないことに注意してください。ほとんどの場合に当てはまりますが、この場合は正しい順序にする必要がありますdict。順序は恣意的であり、最初に低いスコアをチェックして、本来よりも低いスコアを与える可能性があります。

注意として、それは完全に可能です

if 31 < average < 41: #Equivalent to `if 31 < average and average < 41:`
    print("Grade B")

パイソンで。とはいえ、この使用法では、これはリストとループまたはif/を使用するよりもはるかに多くの入力を意味しますelif

于 2012-04-26T15:08:04.520 に答える
3

基本的に、これはあなたが望むものです:

if average >41:
    print(" Grade A ")
elif average >31: 
    print(" Grade B")
elif average >21:
    print(" Grade C")
elif average >11 :
    print(" Grade D")
elif average >0 
    print(" Grade E")
else
    print("You broke the system")

elifは の略なelse ifので、前のif/elifブロックが実行されなかった場合にのみ実行されます。

于 2012-04-26T08:27:42.387 に答える