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

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

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

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

當(dāng)年話下 2024-01-04 10:10:50
我正在學(xué)習(xí)如何使用python,昨天我得到了一個問題,描述如下:修改first_and_last函數(shù),如果字符串的第一個字母與最后一個字母相同則返回True,如果不同則返回False。通過嘗試解決這個問題,我發(fā)現(xiàn)有2個幾乎相同的程序,但一個可以正確運(yùn)行,另一個調(diào)用錯誤:字符串索引超出范圍程序1(可以正確運(yùn)行)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(這會引發(fā)錯誤)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(""))我只想知道這兩個程序有什么區(qū)別,以及為什么它們返回不同的結(jié)果。感謝您的幫助!
查看完整描述

5 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊

因?yàn)閛r運(yùn)算符通過檢查第一個條件來工作,如果第一個條件不為真,則檢查第二個條件。


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


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


您將在此示例中看到


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。


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

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個贊

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



查看完整回答
反對 回復(fù) 2024-01-04
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個贊

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

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

1?/?0?or?True

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

True?or?1?/?0

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

當(dāng)運(yùn)算符到達(dá)允許他們對表達(dá)式做出結(jié)論的操作數(shù)時,就會發(fā)生短路。在這種情況下,or一旦到達(dá)第一個真值就會短路,因?yàn)樗乐辽儆幸粋€值是真而不執(zhí)行1 / 0(盡管它是無效的)。同樣,and當(dāng)?shù)谝粋€值為 false 時會短路,因?yàn)樗啦⒎撬兄刀际?true。

這是備忘單:

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

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

這是因?yàn)榈诙€程序中出現(xiàn)“IndexError:字符串索引超出范圍”錯誤。第一個程序首先比較 len(message) 并且已經(jīng)有一個“True”。雖然您的第二個程序首先將第一個字符與最后一個字符進(jìn)行比較。所以這個問題。



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

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個贊

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



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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