0

基本的には、生徒の名前をリストの順にそれぞれの学年に関連付ける必要があります。だから、これは私がこれまで持っているものです:

def main():

myFile を定義し、grades.txt ファイルを開く/読み取る

myFile = open("grade.txt", "r")

課題、小テスト、試験の生徒数と成績のパーセンテージを定義します

numStudents = int(myFile.readline())
prctgs = myFile.readline().split()
students = ["Amy", "Jack", "Arron", "Zack", "Jen", "Jane"]

for ループを作成して、各生徒のスコアを調べます

for i in range(numStudents):

各生徒の成績を保存する

stdntGrades = myFile.readline().split()

成績のパーセンテージを計算する

grade = 0
for j in range(len(prctgs)):
    grade = grade + float(prctgs[j]) * int(stdntGrades[j])
    print("Student #", i+1, ": ", " %.2f" % grade, sep="")

myFile.close()

main()

「学生」が問題のリストです。名前をファイルに直接入力しようとしたこともありましたが、惨めに失敗しました

「grade.txt」ファイルには次の内容が含まれています。

6
.3 .1 .6
90 89 78
96 92 79
85 100 94
87 92 96
81 88 93
85 91 99

注: これは私の 5 回目のプログラムなので、完全な初心者です。

4

2 に答える 2

0

2つの文字列があるとしましょう...

weights = "0.3 0.1 0.3"
grades =  "90   87  92"

これらをリストに分割できることはすでに知っています。

weights.split() #['0.3', '0.1', '0.3]
grades.split() #['90', '87', '92']

ここで、「一致する数字を同時に取得できたらいいと思いませんか?」と自分に言い聞かせます。まあ、できます。それが次のzip目的で構築されています。

total = 0
for weight,grade in zip(weights.split(),grades.split()):
    total += float(weight)*float(grade)

必要に応じて、これを短縮することもできsumます。

total = sum( float(w)*float(g) for w,g in zip(weights.split(),grades.split() )

したがって、これで 1 人の合計が得られます。これで、ファイルを操作するときに同じ概念を使用できます。個人の名前と成績情報を「圧縮」したいと考えています。方法は次のとおりです。

with open('grade.txt') as data: #fancy way of opening files...
    npeople = int(next(data)) #read first line, make an integer
    weights = [float(x) for x in next(data).split()] #get the weights as a list of floats
    people = ['jack','jill','mary','little miss muffet','kermit','animal']
    for person, grade_info in zip(people,data):
        grade = sum( w*float(g) for w,g in zip(weights,grade_info.split() )
        print person,grade

ここで使用した別のトリックはnext(fileobject). それはただの言い方fileobject.readline()です。実際、python3.xではfileobject.readline()、もはや存在しません...next今すぐ使用することに慣れるかもしれません:)。

ここで使用した 4 つの組み込み関数zipnextfloatおよびsumです。 floatそして、sumそれらがどのように機能するかは非常に明白であるため、説明するのに多くの労力を要しません. もう少しトリッキーですzipnextリンクされたドキュメントを理解するまで読んでください。とても便利です。また、いくつかのリストを作成するためにリスト内包表記を使用しました。それらも非常に便利です。間違いなく Python ユーティリティ ベルトに必要なものです。

于 2013-02-15T03:48:27.590 に答える
0

学生の名前は、コードではなくデータの一部である必要があります。

6
.3 .1 .6
Amy 90 89 78
Jack 96 92 79
Aaron 85 100 94
Zack 87 92 96
Jen 81 88 93
Jane 85 91 99

次に、データとともにそれらを読み取ります。

line = file.readline().split()
student = line[0]
prctgs = line[1:]
于 2013-02-15T03:20:37.623 に答える