"""
定義乙個學生類,例項屬性有name(姓名),age(年齡),提示使用者分別輸入3個學生資訊(姓名以及年齡),
根據使用者輸入的資訊建立3個學生物件,將這3個學生物件存入列表,
遍歷列表刪除年齡小於18歲的學生物件,最後輸出列表中剩餘的學生資訊
"""class student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "學生的姓名:%s, 學生的年齡:%d" % (self.name, self.age)
def main():
stu_list =
for i in range(3):
name = input("請輸入你的姓名:")
age = int(input("請輸入你的年齡:"))
#print(stu_list)
for student in stu_list:
if student.age < 18:
stu_list.remove(student)
print(student)
# for temp in stu_list:
# print(temp)
if __name__ == "__main__":
main()
console:
請輸入你的姓名:aa
請輸入你的年齡:11
請輸入你的姓名:bb
請輸入你的年齡:22
請輸入你的姓名:cc
請輸入你的年齡:33
輸出結果:
學生的姓名:aa, 學生的年齡:11
學生的姓名:cc, 學生的年齡:33
問題:小於18的aa沒有被刪除,反而大於18的bb,被刪除了
for 語句如何迴圈的呢?步驟是:
(1)先判斷物件是否為可迭代物件,不是的話直接報錯,丟擲typeerror異常,是的話,呼叫 __iter__或iter方法,返回乙個迭代器
(2)不斷地呼叫迭代器的__next__或next方法,每次按序返回迭代器中的乙個值
(3)迭代到最後,沒有更多元素了,就丟擲異常 stopiteration,這個異常 python 自己會處理,不會暴露給開發者
如果此時把**最後的for迴圈注釋去掉,列印結果如下:
學生的姓名:aa, 學生的年齡:11
學生的姓名:cc, 學生的年齡:33
第二個for迴圈遍歷
學生的姓名:bb, 學生的年齡:22
學生的姓名:cc, 學生的年齡:33
為什麼會是這樣的結果?
看如下案例:
list1 = [1,2,3,4,5,6]
for i in list1:
if i == 2:
list1.remove(i)
print(i)
print(list1)
結果:
124
56[1, 3, 4, 5, 6]
因為執行for語句時,先生成乙個迭代器,再用next方法,按序返回迭代器中的值,當列表中刪除了元素2時,元素3的索引變成了原來元素2的索引,把元素3往前推到了元素2的位置,所以next方法就沒返回值3.在python中,使用iter函式可以獲得有序聚合型別的迭代器,我個人將迭代器理解為帶有next指標的單向鍊錶,獲取到的迭代器為鍊錶的表頭,表頭內容為空,next指標指向有序聚合型別的第乙個元素。
在訪問鍊錶最後乙個元素的next指標時,python會報錯stopiteration。
詳談python3中用for迴圈刪除列表中元素的坑
for迴圈語句的物件是可迭代物件,可迭代物件需要實現 iter 或iter方法,並返回乙個迭代器,什麼是迭代器呢?迭代器只需要實現 next 或next方法。現在來驗證一下列表為什麼支援迭代 x 1,2,3 its iter x its x.iter print type its print its...
Python3 迴圈語句
python 中的迴圈語句有 for 和 while。python 迴圈語句的控制結構圖如下所示 python 中 while 語句的一般形式 while判斷條件 condition 執行語句 statements 我們可以通過設定條件表示式永遠不為 false 來實現無限迴圈 你可以使用ctrl ...
Python3迴圈結構(一)for迴圈
python3迴圈結構 在python中主要有兩種型別的迴圈結構 for迴圈和while迴圈。for迴圈一般用於有明顯邊界範圍的情況,例如,計算1 2 3 4 5 100等於幾的問題,就可以用for迴圈求解。while迴圈一般應用於迴圈次數難以確定的情況。下面分別介紹這兩種迴圈結構。for迴圈 通常...