我對 for 回圈有疑問。我該如何解決?
這里有 3 個陣列,我需要放入 for 回圈并按類列印:
name = ["Scott", "Liz", "Sarah", "Mark", "Dan"]
address = ["21, old kent road", "13,Trafalgar Square", "45,KingsCross Road", "33,Russel square",
"56,Lewisham Road"]
telephone = ["02075642222", "02078642123", "02084641111", "02085553234", "02076662123"]
students = []
在這里,我回圈并啟動列印所有學生的課程:
for i in range(len(name),len(address),len(telephone)):
stud1 = Studentdetails(name[i], address[i], telephone[I])
我對最后一個 for 回圈有問題。它顯示我只是陣列中的最后一個學生,但它應該都是 5 個。
uj5u.com熱心網友回復:
你所有的串列長度都是 5 (我假設它們總是相同的長度),所以沒有必要考慮它們所有不同的長度。您只需要其中一個的長度即可回圈。由于給定這些引數的行為,您目前擁有它的方式range(5, 5, 5)是空的。range就像我在評論中說的,第一個數字是起始數字,第二個數字是結束數字,第三個數字是“步驟”。有關更多資訊,請參閱:https ://docs.python.org/3/library/functions.html#func-range
因此,如果您這樣做,您的代碼應該可以正常作業:
for i in range(len(name)):
stud1 = Studentdetails(name[i], address[i], telephone[i])
有更多的方法可以使它更“Pythonic”,但如果它太令人困惑,你可以隨意忽略下面的所有內容:
您可以使用該zip函式一次遍歷所有 3 個串列,其中每個專案都是zip該tuple索引的 3 個串列項中的一個。所以,這也可以:
for n, a, t in zip(name, address, telephone):
stud1 = Studentdetails(n, a, t)
您還可以使用星號運算子自動將元組擴展為要傳遞給的引數串列Studentdetails:
for s in zip(name, address, telephone):
stud1 = Studentdetails(*s)
uj5u.com熱心網友回復:
一般避免使用range(len)你幾乎總是不需要它。Pythonfor像for each.
如果您studentdetails采用三個引數,則可以使用 zip 回圈多個專案并使用 * 解包:
for student in zip(name, address, telephone):
students.append(studentdetails(*student))
這相當于:
for studentname, studentaddress, studenttel in zip(name, address, telephone):
students.append(studentdetails(studentname, studentaddress, studenttel))
如果您要為更大的資料集執行此操作,students用結果填充串列的最快方法是添加一個簡短的生成器,它為每組詳細資訊studentdetails()解包zip和:yieldsstudentdetails()
def createstudents(iter):
for item in iter:
yield studentdetails(*item)
students = list(createstudents(zip(name, address, telephone)))
然后讀起來像這樣的句子:“students 是每組姓名、地址、電話的 createtudents 串列”,createtudents 是“對于迭代器中的每個專案:讓我得到 studentdetails 物件”
要深入了解以 Python 方式執行此類操作的方法,請查看前 10 分鐘:https ://www.youtube.com/watch?v=OSGv2VnC0go
uj5u.com熱心網友回復:
我懷疑 Studentdetails 是一個類,所以我將在這里模擬它并展示如何構建學生串列:
class Studentdetails:
def __init__(self, name, address, telephone):
self.name = name
self.address = address
self.telephone = telephone
def __repr__(self):
return f'Name={self.name}, Address={self.address}, Telephone={self.telephone}'
name = ["Scott", "Liz", "Sarah", "Mark", "Dan"]
address = ["21, old kent road", "13,Trafalgar Square", "45,KingsCross Road", "33,Russel square",
"56,Lewisham Road"]
telephone = ["02075642222", "02078642123", "02084641111", "02085553234", "02076662123"]
students = []
assert len(name) == len(address) and len(address) == len(telephone)
for name_, address_, telephone_ in zip(name, address, telephone):
students.append(Studentdetails(name_, address_, telephone_))
for student in students:
print(student)
輸出:
Name=Scott, Address=21, old kent road, Telephone=02075642222
Name=Liz, Address=13,Trafalgar Square, Telephone=02078642123
Name=Sarah, Address=45,KingsCross Road, Telephone=02084641111
Name=Mark, Address=33,Russel square, Telephone=02085553234
Name=Dan, Address=56,Lewisham Road, Telephone=02076662123
uj5u.com熱心網友回復:
class Studentdetails:
def __init__(self, name, address, telephone, address2="London"):
self.name = name
self.address = address
self.telephone = telephone
self.city = address2
def __repr__(self):
return f'Name={self.name}, Address={self.address}, City={self.city}, Telephone={self.telephone}'
class Totalmarks():
def __init__(self, total=0.0, average=0.0):
self.totmarks = total
self.average = average
def total(self, total):
self.markslist = total
for i in range(5):
self.totmarks = self.totmarks self.markslist[i]
return self.totmarks
def Aver(self):
self.average = self.totmarks / 5
return self.average
class Teachercomments():
def comments(self, average):
self.average = average
if self.average <= 30:
print("Teacher Comments: ", "\n", "Needs to work hard and attend extra sessions to progress.")
elif self.average >= 31 and self.average <= 50:
print("Teacher Comments: ", "\n", "Needs to improve the quality of work produced to make a progression")
elif self.average >= 51 and self.average <= 70:
print("Teacher Comments: ", "\n",
"Making good progress but need to focus on certain topics to achieve high marks")
elif self.average >= 71 and self.average <= 80:
print("Teacher Comments: ", "\n", "Needs to be carefully")
else:
print("Teacher Comments: ", "\n", "Well done for making an excellent progress.")
def report():
s = "*" * 65
studtotal = Totalmarks()
print(s, "\n", " " * 20, "Student Report", "\n", s)
marks = []
for i in range(5):
smarks = int(input("please enter your mark"))
marks.append(smarks)
print(marks)
sumtot = studtotal.total(marks)
av = studtotal.Aver()
print("Total marks:", sumtot)
print("Average:", av)
tcom = Teachercomments()
tcom.comments(av)
report()
name = ["Scott", "Liz", "Sarah", "Mark", "Dan"]
address = ["21, old kent road", "13,Trafalgar Square", "45,KingsCross Road", "33,Russel square",
"56,Lewisham Road"]
telephone = ["02075642222", "02078642123", "02084641111", "02085553234", "02076662123"]
students = []
assert len(name) == len(address) and len(address) == len(telephone)
for name_, address_, telephone_ in zip(name, address, telephone):
students.append(Studentdetails(name_, address_, telephone_))
for student in students:
print(student)
Output
*****************************************************************
Student Report
*****************************************************************
please enter your mark1
please enter your mark2
please enter your mark3
please enter your mark4
please enter your mark45
[1, 2, 3, 4, 45]
Total marks: 55.0
Average: 11.0
Teacher Comments:
Needs to work hard and attend extra sessions to progress.
Name=Scott, Address=21, old kent road, City=London, Telephone=02075642222
Name=Liz, Address=13,Trafalgar Square, City=London, Telephone=02078642123
Name=Sarah, Address=45,KingsCross Road, City=London, Telephone=02084641111
Name=Mark, Address=33,Russel square, City=London, Telephone=02085553234
Name=Dan, Address=56,Lewisham Road, City=London, Telephone=02076662123
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473794.html
下一篇:C文本格式化程式字符計數已關閉
