亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python不相等的兩個(gè)字符串的 if 條件判斷為True詳解

 更新時(shí)間:2020年03月12日 15:34:29   作者:呆萌的代Ma  
這篇文章主要介紹了python不相等的兩個(gè)字符串的 if 條件判斷為True詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

今天遇到一個(gè)非?;A(chǔ)的問(wèn)題,結(jié)果搞了好久好久.....趕快寫一篇博客記錄一下:

本來(lái)兩個(gè)不一樣的字符串,在if 的條件判斷中被判定為True,下面是錯(cuò)誤的代碼:

test_str = 'happy'
if test_str == 'good' or 'happy': #這樣if判斷永遠(yuǎn)是True,寫法錯(cuò)誤
  print('aa')
else:
  print('bbbb')

這是正確的代碼:

test_str = 'happy'
if test_str == 'good' or test_str == 'happy':
  print('aa')
else:
  print('bbbb')

補(bǔ)充知識(shí):python基礎(chǔ)(if判斷條件語(yǔ)句,比較、布爾運(yùn)算符)

1.條件和條件語(yǔ)句

在編寫的程序中,語(yǔ)句都是逐條執(zhí)行的?,F(xiàn)在更進(jìn)一步,讓程序選擇是否執(zhí)行特定的語(yǔ)句塊。

1 )布爾值的用武之地

真值也稱布爾值,是以在真值方面做出了巨大貢獻(xiàn)的George Boole命名的。

用作布爾表達(dá)式(如用作if語(yǔ)句中的條件)時(shí),下面的值都將被解釋器視為假:

False None 0 "" () [] {}

換而言之,標(biāo)準(zhǔn)值False和None、各種類型(包括浮點(diǎn)數(shù)、復(fù)數(shù)等)的數(shù)值0、空序列(如空字符串、空元組和空列表)以及空映射(如空字典)都被視為假,而其他各種值都被視為真,包括特殊值True。

正如Python老手Laura Creighton指出的,這種差別類似于“有些東西”和“沒(méi)有東西”的差別,而不是真和假的差別。

這意味著任何Python值都可解釋為真值。乍一看這有點(diǎn)令人迷惑,但也很有用。雖然可供選擇的真值非常多,但標(biāo)準(zhǔn)真值為True和False。在有些語(yǔ)言(如C語(yǔ)言和2.3之前的Python版本)中,標(biāo)準(zhǔn)真值為0(表示假)和1(表示真)。實(shí)際上,True和False不過(guò)是0和1的別名,雖然看起來(lái)不同,但作用是相同的。

>>> True 
True 
>>> False 
False 
>>> True == 1 
True 
>>> False == 0 
True 
>>> True + False + 42 
43 

因此,如果你看到一個(gè)返回1或0的表達(dá)式(可能是使用較舊的Python版本編寫的),就知道這實(shí)際上意味著True或False。

布爾值True和False屬于類型bool,而bool與list、str和tuple一樣,可用來(lái)轉(zhuǎn)換其他的值。

>>> bool('I think, therefore I am') 
True 
>>> bool(42) 
True 
>>> bool('') 
False 
>>> bool(0) 
False 

鑒于任何值都可用作布爾值因此你幾乎不需要顯式地進(jìn)行轉(zhuǎn)換(Pthon會(huì)自動(dòng)轉(zhuǎn)換)

雖然[]和""都為假(即bool([]) == bool("") == False),但它們并不相等(即[] != "")。

對(duì)其他各種為假的對(duì)象來(lái)說(shuō),情況亦如此(一個(gè)更顯而易見(jiàn)的例子是() != False)。

2) 有條件地執(zhí)行和 if 語(yǔ)句

真值可合并,先來(lái)看看真值可用來(lái)做什么。請(qǐng)嘗試運(yùn)行下面的腳本:

name = input('What is your name? ') 
if name.endswith('Gumby'): 
 print('Hello, Mr. Gumby') 

這就是if語(yǔ)句,讓你能夠有條件地執(zhí)行代碼。這意味著如果條件(if和冒號(hào)之間的表達(dá)式)為前面定義的真,就執(zhí)行后續(xù)代碼塊(這里是一條print語(yǔ)句);如果條件為假,就不執(zhí)行。

3)else 子句

在前一節(jié)的示例中,如果你輸入以Gumby結(jié)尾的名字,方法name.endswith將返回True,導(dǎo)致后續(xù)代碼塊執(zhí)行——打印問(wèn)候語(yǔ)。如果你愿意,可使用else子句增加一種選擇(之所以叫子句是因?yàn)閑lse不是獨(dú)立的語(yǔ)句,而是if語(yǔ)句的一部分)。

name = input('What is your name?') 
if name.endswith('Gumby'): 
 print('Hello, Mr. Gumby') 
else: 
 print('Hello, stranger') 

在這里,如果沒(méi)有執(zhí)行第一個(gè)代碼塊(因?yàn)闂l件為假),將進(jìn)入第二個(gè)代碼塊。

還有一個(gè)與if語(yǔ)句很像的“親戚”,它就是條件表達(dá)式——C語(yǔ)言中三目運(yùn)算符的Python版本。下面的表達(dá)式使用if和else確定其值:

status = "friend" if name.endswith("Gumby") else "stranger"

如果條件(緊跟在if后面)為真,表達(dá)式的結(jié)果為提供的第一個(gè)值(這里為"friend"),否則為第二個(gè)值(這里為"stranger")。

4)elif 子句

要檢查多個(gè)條件,可使用elif。elif是else if的縮寫,由一個(gè)if子句和一個(gè)else子句組合而成,也就是包含條件的else子句。

num = int(input('Enter a number: ')) 
ifnum > 0: 
 print('The number is positive') 
elifnum < 0: 
 print('The number is negative') 
else: 
 print('The number is zero') 

5)代碼塊嵌套

你可將if語(yǔ)句放在其他if語(yǔ)句塊中,如下所示:

name = input('What is your name? ') 
if name.endswith('Gumby'): 
   if name.startswith('Mr.'): 
     print('Hello, Mr. Gumby') 
   elif name.startswith('Mrs.'): 
     print('Hello, Mrs. Gumby') 
   else: 
     print('Hello, Gumby') 
else: 
   print('Hello, stranger') 

在這里,如果名字以Gumby結(jié)尾,就同時(shí)檢查名字開(kāi)頭,這是在第一個(gè)代碼塊中使用一條獨(dú)立的if語(yǔ)句完成的。請(qǐng)注意,這里還使用了elif。最后一個(gè)分支(else子句)沒(méi)有指定條件——如果沒(méi)有選擇其他分支,就選擇最后一個(gè)分支。如果需要,這里的兩個(gè)else子句都可省略。如果省略里面的else子句,將忽略并非以Mr.或Mrs.打頭的名字(假設(shè)名字為Gumby)。如果省略外面的else子句,將忽略陌生人。

6)更復(fù)雜的條件

1. 比較運(yùn)算符

在條件表達(dá)式中,最基本的運(yùn)算符可能是比較運(yùn)算符,它們用于執(zhí)行比較。

從理論上說(shuō),可使用<和<=等運(yùn)算符比較任意兩個(gè)對(duì)象x和y的相對(duì)大小,并獲得一個(gè)真值,但這種比較僅在x和y的類型相同或相近時(shí)(如兩個(gè)整數(shù)或一個(gè)整數(shù)和一個(gè)浮點(diǎn)數(shù))才有意義。

將整數(shù)與字符串相加毫無(wú)意義,檢查一個(gè)整數(shù)是否小于一個(gè)字符串也是一樣。

與賦值一樣,Python也支持鏈?zhǔn)奖容^:可同時(shí)使用多個(gè)比較運(yùn)算符,如0 < age < 100。有些比較運(yùn)算符需要特別注意

相等運(yùn)算符

要確定兩個(gè)對(duì)象是否相等,可使用比較運(yùn)算符,用兩個(gè)等號(hào)(==)表示。

>>> "foo" == "foo" 
True 
>>> "foo" == "bar" 
False 

兩個(gè)等號(hào)?為何不像數(shù)學(xué)中那樣使用一個(gè)等號(hào)呢?但這里還是試試一個(gè)等號(hào)吧。

>>> "foo" = "foo"
SyntaxError: can't assign to literal

一個(gè)等號(hào)是賦值運(yùn)算符,用于修改值,而進(jìn)行比較時(shí)你可不想這樣做。

is:相同運(yùn)算符

這個(gè)運(yùn)算符很有趣,其作用看似與==一樣,但實(shí)際上并非如此。

>>> x = y = [1, 2, 3] 
>>> z = [1, 2, 3] 
>>> x == y 
True 
>>> x == z 
True 
>>> x is y 
True 
>>> x is z 
False

在前幾個(gè)示例中,看不出什么問(wèn)題,但最后一個(gè)示例的結(jié)果很奇怪:x和z相等,但x is z的結(jié)果卻為False。為何會(huì)這樣呢?因?yàn)閕s檢查兩個(gè)對(duì)象是否相同(而不是相等)。變量x和y指向同一個(gè)列表,而z指向另一個(gè)列表(其中包含的值以及這些值的排列順序都與前一個(gè)列表相同)。這兩個(gè)列表雖然相等,但并非同一個(gè)對(duì)象。這好像不可理喻?請(qǐng)看下面的示例:

>>> x = [1, 2, 3] 
>>> y = [2, 4] 
>>> x is not y 
True 
>>> del x[2] 
>>> y[1] = 1 
>>> y.reverse() 

在這個(gè)示例中,我首先創(chuàng)建了兩個(gè)不同的列表x和y。如你所見(jiàn),x is not y(與x is y相反)的結(jié)果為True,接下來(lái),我稍微修改了這兩個(gè)列表,現(xiàn)在它們雖然相等,但依然是兩個(gè)不同的列表。

>>> x == y 
True 
>>> x is y 
False 

顯然,這兩個(gè)列表相等但不相同。

總之,==用來(lái)檢查兩個(gè)對(duì)象是否相等,而is用來(lái)檢查兩個(gè)對(duì)象是否相同(是同一個(gè)對(duì)象)。

不要將is用于數(shù)和字符串等不可變的基本值。鑒于Python在內(nèi)部處理這些對(duì)象的方式,這樣做的結(jié)果是不可預(yù)測(cè)的。

in:成員資格運(yùn)算符

與其他比較運(yùn)算符一樣,它也可用于條件表達(dá)式中。

name = input('What is your name?') 
if 's' in name: 
 print('Your name contains the letter "s".') 
else: 
 print('Your name does not contain the letter "s".') 

字符串和序列的比較

字符串是根據(jù)字符的字母排列順序進(jìn)行比較的。

>>> "alpha" < "beta"
True

雖然基于的是字母排列順序,但字母都是Unicode字符,它們是按碼點(diǎn)排列的。

實(shí)際上,字符是根據(jù)順序值排列的。要獲悉字母的順序值,可使用函數(shù)ord。這個(gè)函數(shù)的作用與函數(shù)chr相反。

這種方法既合理又一致,但可能與你排序的方式相反。例如,涉及大寫字母時(shí),排列順序就可能與你想要的不同。

>>> "a" < "B"
False

一個(gè)訣竅是忽略大小寫。為此可使用字符串方法lower,如下所示:

>>> "a".lower() < "B".lower() 
True 
>>> 'FnOrD'.lower() == 'Fnord'.lower() 
True 

其他序列的比較方式與此相同,但這些序列包含的元素可能不是字符,而是其他類型的值。

>>> [1, 2] < [2, 1]
True


如果序列的元素為其他序列,將根據(jù)同樣的規(guī)則對(duì)這些元素進(jìn)行比較。

>>> [2, [1, 4]] < [2, [1, 5]]
True

2. 布爾運(yùn)算符

至此,你已見(jiàn)過(guò)很多返回真值的表達(dá)式(實(shí)際上,考慮到所有值都可解釋為真值,因此所有的表達(dá)式都返回真值),但你可能需要檢查多個(gè)條件。例如,假設(shè)你要編寫一個(gè)程序,讓它讀取一個(gè)數(shù),并檢查這個(gè)數(shù)是否位于1~10(含)。為此,可像下面這樣做:

number = int(input('Enter a number between 1 and 10: ')) 
if number <= 10: 

   if number >= 1: 
     print('Great!') 
   else: 
     print('Wrong!') 
else: 
   print('Wrong!')

這可行,但有點(diǎn)笨拙,因?yàn)檩斎肓藀rint('Wrong!')兩次。重復(fù)勞動(dòng)可不是好事,那么該如何辦呢?很簡(jiǎn)單。

number = int(input('Enter a number between 1 and 10: ')) 
if number <= 10 and number >= 1: 
  print('Great!') 
else: 
  print('Wrong!') 

通過(guò)使用鏈?zhǔn)奖容^1 <= number <= 10可進(jìn)一步簡(jiǎn)化這個(gè)示例。

運(yùn)算符and是一個(gè)布爾運(yùn)算符。它接受兩個(gè)真值,并在這兩個(gè)值都為真時(shí)返回真,否則返回假。還有另外兩個(gè)布爾運(yùn)算符:or和not。通過(guò)使用這三個(gè)運(yùn)算符,能以任何方式組合真值。

if ((cash > price) or customer_has_good_credit) and not out_of_stock:
give_goods()

短路邏輯和條件表達(dá)式

布爾運(yùn)算符有個(gè)有趣的特征:只做必要的計(jì)算。例如,僅當(dāng)x和y都為真時(shí),表達(dá)式x and y才為真。因此如果x為假,這個(gè)表達(dá)式將立即返回假,而不關(guān)心y。實(shí)際上,如果x為假,這個(gè)表達(dá)式將返回x,否則返回y。這種行為稱為短路邏輯(或者延遲求值):布爾運(yùn)算符常被稱為邏輯運(yùn)算符,在有些情況下將“繞過(guò)”第二個(gè)值。對(duì)于運(yùn)算符or,情況亦如此。在表達(dá)式x or y中,如果x為真,就返回x,否則返回y。請(qǐng)注意,這意味著位于布爾運(yùn)算符后面的代碼(如函數(shù)調(diào)用)可能根本不會(huì)執(zhí)行。像下面這樣的代碼就利用了這種行為:

name = input('Please enter your name: ') or '<unknown>'

如果沒(méi)有輸入名字,上述or表達(dá)式的結(jié)果將為'<unknown>'。在很多情況下,寧愿使用條件表達(dá)式,而不耍這樣的短路花樣。

以上這篇python不相等的兩個(gè)字符串的 if 條件判斷為True詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法

    python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 六行python代碼的愛(ài)心曲線詳解

    六行python代碼的愛(ài)心曲線詳解

    這篇文章主要介紹了六行python代碼的愛(ài)心曲線詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 淺析pytorch中對(duì)nn.BatchNorm2d()函數(shù)的理解

    淺析pytorch中對(duì)nn.BatchNorm2d()函數(shù)的理解

    Batch Normalization強(qiáng)行將數(shù)據(jù)拉回到均值為0,方差為1的正太分布上,一方面使得數(shù)據(jù)分布一致,另一方面避免梯度消失,這篇文章主要介紹了pytorch中對(duì)nn.BatchNorm2d()函數(shù)的理解,需要的朋友可以參考下
    2023-11-11
  • Python通過(guò)命令行向Scrapy傳遞參數(shù)

    Python通過(guò)命令行向Scrapy傳遞參數(shù)

    crapy作為一個(gè)強(qiáng)大的Web爬取框架,提供了靈活的命令行參數(shù)傳遞功能,本文介紹了通過(guò)命令行向Scrapy爬蟲(chóng)傳遞參數(shù)的方法,旨在增強(qiáng)爬蟲(chóng)的靈活性和可配置性,感興趣的可以了解一下
    2024-10-10
  • 解決python xlrd無(wú)法讀取excel文件的問(wèn)題

    解決python xlrd無(wú)法讀取excel文件的問(wèn)題

    今天小編就為大家分享一篇解決python xlrd無(wú)法讀取excel文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 跟老齊學(xué)Python之編寫類之三子類

    跟老齊學(xué)Python之編寫類之三子類

    本文已經(jīng)是編寫類系列的第三篇了,也是最后一篇,介紹下子類,也算是個(gè)小總結(jié)吧,有需要的朋友可以參考下
    2014-10-10
  • 教你如何識(shí)別代理IP的真實(shí)地理位置(使用Python庫(kù))

    教你如何識(shí)別代理IP的真實(shí)地理位置(使用Python庫(kù))

    本文介紹了IP數(shù)據(jù)庫(kù)查詢、反向DNS查詢和網(wǎng)絡(luò)延遲測(cè)量三種方法,并通過(guò)案例分析和代碼實(shí)現(xiàn)展示了如何使用Python庫(kù)進(jìn)行IP地理位置查詢,需要的朋友可以參考下
    2024-03-03
  • Python?Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景分析

    Python?Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景分析

    這篇文章主要介紹了Python?Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景,裝飾器可以分成方法裝飾器和類裝飾器,他們的區(qū)別是一個(gè)是用函數(shù)實(shí)現(xiàn)的裝飾器,一個(gè)是用類實(shí)現(xiàn)的裝飾器,他們也都能在方法和類上進(jìn)行裝飾,需要的朋友可以參考下
    2022-07-07
  • 淺談Python 中整型對(duì)象的存儲(chǔ)問(wèn)題

    淺談Python 中整型對(duì)象的存儲(chǔ)問(wèn)題

    這篇文章主要介紹了淺談Python 中整型對(duì)象的存儲(chǔ)問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • python數(shù)學(xué)建模之三大模型與十大常用算法詳情

    python數(shù)學(xué)建模之三大模型與十大常用算法詳情

    這篇文章主要介紹了python數(shù)學(xué)建模之三大模型與十大常用算法詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感想取得小伙伴可以參考一下
    2022-07-07

最新評(píng)論