亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Python中if語句和空字符串的問題

Python中if語句和空字符串的問題

當年話下 2024-01-04 10:10:50
我正在學習如何使用python,昨天我得到了一個問題,描述如下:修改first_and_last函數,如果字符串的第一個字母與最后一個字母相同則返回True,如果不同則返回False。通過嘗試解決這個問題,我發現有2個幾乎相同的程序,但一個可以正確運行,另一個調用錯誤:字符串索引超出范圍程序1(可以正確運行)def first_and_last(message):    if len(message) == 0 or message[0] == message[-1]:        return True    else:        return Falseprint(first_and_last("else"))print(first_and_last("tree"))print(first_and_last(""))程序 2(這會引發錯誤)def first_and_last(message):    if message[0] == message[-1] or len(message) == 0:        return True    else:        return Falseprint(first_and_last("else"))print(first_and_last("tree"))print(first_and_last(""))我只想知道這兩個程序有什么區別,以及為什么它們返回不同的結果。感謝您的幫助!
查看完整描述

5 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

因為or運算符通過檢查第一個條件來工作,如果第一個條件不為真,則檢查第二個條件。


你的左邊or是真的(len(message) == 0),所以右邊不被執行(message[0] == message[-1])。因此,您不會得到范圍異常。


如果交換順序,message[0] == message[-1]位于運算符的左側,因此執行時不會檢查字符串是否為空。


您將在此示例中看到


def condition_1():

    print('condition_1 executed')

    return True

def condition_2():

    print('condition_2 executed')

    return True


if condition_1()or condition_2():

    print('one condition is true')

你會得到condition_1 executed。如果更改condition_1 為 return false,您將同時得到condition_1 executed和condition_2 executed。


查看完整回答
反對 回復 2024-01-04
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

第一個程序工作的原因是它首先檢查len消息的 0 是否為 0,如果是,True則立即進入 if 語句,而第二個程序首先檢查第一個字母是否等于最后一個字母,并且由于空字符串如果失敗則沒有索引 0。



查看完整回答
反對 回復 2024-01-04
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

最近,當我瀏覽cs61a時,我在課程網站上發現了一些非常有用的信息,我決定涵蓋重要部分并將鏈接放在這里,供其他可能提出這個問題的人作為參考。

這個問題基本上是由Python處理表達式的順序引起的,即Short Circuiting。例如,當您在 Python 中鍵入以下內容時:

1?/?0?or?True

我們會得到 a?ZeroDivisionError,因為 1 除以 0 在數學中是無效的。聽起來很合理,對吧?但是運行這段代碼我們會得到什么呢?

True?or?1?/?0

True既然它只是交換了和 的順序1 / 0,也許我們會得到相同的結果?答案是否定的,運行代碼后,我們得到了True相反的結果,這就是短路的工作原理!

當運算符到達允許他們對表達式做出結論的操作數時,就會發生短路。在這種情況下,or一旦到達第一個真值就會短路,因為它知道至少有一個值是真而不執行1 / 0(盡管它是無效的)。同樣,and當第一個值為 false 時會短路,因為它知道并非所有值都是 true。

這是備忘單:

操作員支票從左到右評估
如果所有值都是 true第一個假值
或者如果至少有一個值為 true第一個真實值
查看完整回答
反對 回復 2024-01-04
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

這是因為第二個程序中出現“IndexError:字符串索引超出范圍”錯誤。第一個程序首先比較 len(message) 并且已經有一個“True”。雖然您的第二個程序首先將第一個字符與最后一個字符進行比較。所以這個問題。



查看完整回答
反對 回復 2024-01-04
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

如果至少一個條件為真,“或”語句為 True。當“or”的左側為 true 時,右側不會執行,因此第二個程序中出現空字符串錯誤,但第一個程序中的空字符串沒有錯誤



查看完整回答
反對 回復 2024-01-04
  • 5 回答
  • 0 關注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號