なぜこれはすべてのために同じ文字の等級を印刷するのですか?

StackOverflow https://stackoverflow.com//questions/25090161

  •  02-01-2020
  •  | 
  •  

質問

私の課題は、テキストファイルを開いて読み取り、平均重みを含む成績を計算し、最終成績を与え、それを文字成績に変更してから、新しいテキストファイルに書き込むプログラムを作成することです。すべてが文字の成績へのポイントの変換まで正常に働いています。すべての成績は70-89の間にあるので、私はa、B、またはE(F)の他のコードを入れても気にしません。成績を文字の成績に変換しようとすると、全員の成績がCに変わります。私はどこが間違っていたのですか?

infile = open("c:\\Python34\\MyFiles\\ClassGradebook.txt","r")  
outfile = open("c:\\Python34\\myfiles\\ClassGrades.txt","w") 

aline = infile.readline()  # uses readline method to read the first line of the file

def quizsum():
        quizsum1 = quiz1 + quiz2 + quiz3
        quizavg = (quizsum1 / 30) * .3
        return float(quizavg)

def midtermsum():
        midtermsum1 = midterm1 + midterm2
        midtermavg = (midtermsum1 / 200) * .4
        return float(midtermavg)

def finalsum():
        finalsum1 = final1
        finalavg = (finalsum1 / 100) * .3
        return float(finalavg)
def lettergrade():
        if printedgrade >= 70 <= 79:
                return "C"
        else:
                return "B"       

while aline:
        items = aline.split()   
        dataline = items[0] + " " + items[1] 
        quiz1 = int(items[2])
        quiz2 = int(items[3])
        quiz3 = int(items[4])
        midterm1 = int(items[5])
        midterm2 = int(items[6])
        final1 = int(items[7])
        quizavg = quizsum()
        midtermavg = midtermsum()
        finalavg = finalsum()
        gradetotal = quizavg + midtermavg + finalavg
        printedgrade = gradetotal * 100
        printedgrade2 = lettergrade()
        print(dataline)
        print(printedgrade2)
        outfile.write(printedgrade2 + '\n')   newline character
        aline = infile.readline()   

infile.close()  
outfile.close()  
役に立ちましたか?

解決

あなたのために if 順不同であるため、常にtrueを評価しています。それはすべきです:

70 <= printedgrade <= 79

あなたが言ったように、すべての成績は70-89であるため、あなたの声明は常に真と評価されています printedgrade 70以上になり、70は79未満になるので、常に次のようになります True.

私はあなたのコードをすべての成績で動作させることを強くお勧めしますが。今回は成績が常に一定の範囲にあるため、想定することはできません。

他のヒント

if printedgrade >= 70 <= 79:
.

であるべきです
if printedgrade >= 70 and printedgrade <= 79:
.

あなたは何かをすることができます:

if printedgrade >= 90:
    return "A"
elif printedgrade >= 80:
    return "B"
elif printedgrade >= 70:
    return "C"
...
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top