第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

條件相反,結(jié)果不同

條件相反,結(jié)果不同

臨摹微笑 2024-01-12 10:30:34
'''import operatordef sorted (a, xs):   '''a is the operator, xs is a list'''   if a == operator.gt:       for i in range(len(xs)):           if xs[i] < xs[i+1]:               return False           else: True'''如果我以相反的條件寫入它,則會出現(xiàn)錯誤“IndexError:列表索引超出范圍” if a == operator.gt:   for i in range(len(xs)):       if xs[i] > xs[i+1]:           return True       else: False
查看完整描述

1 回答

?
海綿寶寶撒

TA貢獻1809條經(jīng)驗 獲得超8個贊

主要問題是您編寫for i in range(len(xs)):然后嘗試訪問xs[i+1]. 這必然會IndexError: list index out of range在循環(huán)的最后一次迭代中引發(fā)異常。


代碼的第二個問題是else: Trueorelse: False部分,它什么也不做。您可能忘記了關(guān)鍵字return。就目前而言,您的代碼相當(dāng)于:


import operator

def sorted (a, xs):

? ?'''a is the operator, xs is a list'''?

? if a == operator.gt:

? ? ? ?for i in range(len(xs)):

? ? ? ? ? ?if xs[i] < xs[i+1]:

? ? ? ? ? ? ? ?return False

i == len(xs)-1當(dāng)和i+11 太大時,將在循環(huán)的最后一次迭代中引發(fā)異常。

是否會得到異常IndexError: list index out of range取決于for-loop 是否有機會繼續(xù)其最后一次迭代,或者函數(shù)是否會在 -loopreturn的最后一次迭代之前for。

另一個問題是你調(diào)用了你的 function?sorted,它已經(jīng)是 python 中內(nèi)置函數(shù)的名稱。重復(fù)使用該名稱會導(dǎo)致混亂和可能的錯誤。由于您的函數(shù)不返回排序列表,而是測試列表是否已排序,因此我建議改為調(diào)用它is_sorted。

要同時解決這兩個問題:

  • 刪除else分支;

  • 添加與關(guān)鍵字return True?相同級別的縮進for;

  • range(len(xs))用。。。來代替range(len(xs)-1)

-1你明白這里的必要性嗎?想象一下,如果您的列表有 3 個元素。需要進行多少次比較才能檢查是否已排序?您需要將第一個元素與第二個元素進行比較;然后是第二個和第三個;就是這樣。3 個元素僅進行 2 次比較。如果省略-1,您將嘗試將第三個元素與虛構(gòu)的第四個元素進行比較,并且 python 解釋器會抱怨并引發(fā)IndexError: list index out of range。

最終代碼:

import operator

def is_sorted (a, xs):

? ?'''a is the operator, xs is a list'''?

? if a == operator.gt:

? ? ? ?for i in range(len(xs)-1):

? ? ? ? ? ?if xs[i] < xs[i+1]:

? ? ? ? ? ? ? ?return False

? ? ? ?return True

遵循 python 約定:可選參數(shù)reverse

a與參數(shù)進行比較operator.gt有點笨拙,因為編寫的函數(shù)無論如何都不能與自定義運算符一起使用。我建議遵循python 內(nèi)置函數(shù)sorted和 的list.sort()約定,它使用默認reverse為 的可選參數(shù)False。

代碼:

def is_sorted(xs, reverse=False):

? if not reverse:

? ? for i in range(len(xs)-1):

? ? ? if xs[i] > xs[i+1]:

? ? ? ? return False

? ? return True

? else:

? ? for i in range(len(xs)-1):

? ? ? if xs[i] < xs[i+1]:

? ? ? ? return False

? ? return True

進一步改進建議:

  • 添加可選參數(shù),key如 python 內(nèi)置函數(shù)sortedlist.sort;

  • 讓用戶給你一個比較運算符,并直接使用該運算符而不是<or>

使用或 的替代代碼anyall

def is_sorted(xs):

? return all(xs[i] <= xs[i+1] for i in range(len(xs)-1))


def is_sorted(xs):

? return not any(xs[i] > xs[i+1] for i in range(len(xs)-1))


查看完整回答
反對 回復(fù) 2024-01-12
  • 1 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號