我是 python 新手,我正在為每個人學習關于 python 的免費課程。在課程中,他們給了我們一個問題:
下面是從值串列中查找最小值的代碼。一行有一個錯誤,將導致代碼無法按預期作業。是哪一行?:
smallest = None
print("Before:", smallest)
for itervar in [3, 41, 12, 9, 74, 15]:
if smallest is None or itervar < smallest:
smallest = itervar
break
print("Loop:", itervar, smallest)
print("Smallest:", smallest)
答案是第 6 行。我很困惑為什么第 3 行不是答案?minimum = None,但 None 是一個字串。代碼不會因為 3 < None 不起作用而中斷嗎?(在 itervar<smallest) 部分。
非常感謝!
uj5u.com熱心網友回復:
None不是字串。這是一個特殊的值,表示缺乏有意義的值。
但是你是對的,你不能比較字串和整數或None整數。
但是,這永遠不會發生,因為or短路:如果你有A or B并且A是真的,那么B永遠不會被評估。因此,如果smallest is None它不與 進行比較itervar,那么一切都很好。
uj5u.com熱心網友回復:
None 不是字串,它是一個 python 關鍵字,它在 Python 中參考 no 值 None
不,它不會中斷。
這是因為首先檢查第一個條件。而 if smallest=None,因為它是一個or塊,第二個條件不會被檢查,因此回圈作業。僅當第一個條件
為itervar < smallestFalse
uj5u.com熱心網友回復:
“無”不是字串。它指定“最小”當前沒有值,類似于為空。if 條件的第一部分(small 為 None)在第一次迭代中只為真一次。然后它將“smallest”設定為“itervar”(3,在這種情況下是串列中的第一個數字),此后回圈由于“break”陳述句而立即停止,并移至第 8 行列印“最小:3"。所以 break 陳述句是問題所在,這使得答案第 6 行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432748.html
上一篇:在排序之前找到計算的來源?
