重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
さて、私はPythonを学ぼうとしています。数学期前にPythonクラスの紹介をした友人がいて、彼は私に古い課題をすべて教えてくれました。私は特に厄介な問題を抱えており、それは非常に単純なはずだと思いますが、私の問題がどこにあるのか理解できないようです。皆さんの考えをご覧ください。
プログラムは、grades.txtというファイルから読み取ることになっています。ファイルは次のとおりです。
2
John Doe
82
100
57
0
Jane Smith
91
12
45
81
0
このファイルの形式は次のとおりです。最初の行は学生の数です。次に、生徒の名前とそれに続く成績があります。ゼロは、生徒の成績リストの終わりを表します。私は知っています、私は知っています...そのようにすることはあまり意味がありませんが、それはこれが読む方法です。
とにかく、これが私がこれまでに書いたコードです。
#!/usr/bin/env python
class students():
def __init__(self, fname='', lname='', grades=[]):
self.firstName = fname
self.lastName = lname
self.gradeBook = grades
def lineCheck(lineText):
try:
int(lineText)
return True
except ValueError:
return False
inFile = "grades.txt"
outFile = "summary.txt"
count = 0
numStudents = 0
studentList = []
check = False
with open(inFile, "r") as file:
for line in file:
if(count == 0):
numStudents = line.strip()
else:
lineRead = line.strip()
check = lineCheck(lineRead)
if(check == False):
studentName = lineRead.split()
fName = studentName[0]
lName = studentName[1]
temp = students(fName, lName)
else:
if(lineRead != '0'):
temp.gradeBook.append(lineRead)
elif(lineRead == '0'):
studentList.append(temp)
count += 1
file.close()
for student in studentList:
print student.firstName + " " + student.lastName
print student.gradeBook
このコードでは、私にとって期待される出力は、プログラムの最後のforループにあります。私はこのようなものを見ることを期待しています:
John Doe
['82', '100', '57']
Jane Smith
['91', '12', '45', '81']
しかし、私が得ている出力はこれです:
John Doe
['82', '100', '57', '91', '12', '45', '81']
Jane Smith
['82', '100', '57', '91', '12', '45', '81']
私はこれをずっと見つめていましたが、これは非常に単純なことだと感じています。しかし、私はPythonに不慣れで、そのニュアンスのすべてにまだ完全に慣れていないので、経験豊富な人がここで何が起こっているのかを理解できるかもしれません。私はあなたが私に与えることができるどんな助けでも本当に感謝します。ありがとう。