欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

今天遇到一個非常基礎(chǔ)的問題,結(jié)果搞了好久好久.....趕快寫一篇博客記錄一下:

本來兩個不一樣的字符串,在if 的條件判斷中被判定為True,下面是錯誤的代碼:

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

這是正確的代碼:

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

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

1.條件和條件語句

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

1 )布爾值的用武之地

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

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

False None 0 "" () [] {}

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

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

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

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

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

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

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

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

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

對其他各種為假的對象來說,情況亦如此(一個更顯而易見的例子是() != False)。

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

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

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

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

3)else 子句

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

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

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

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

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

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

4)elif 子句

要檢查多個條件,可使用elif。elif是else if的縮寫,由一個if子句和一個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語句放在其他if語句塊中,如下所示:

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

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

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

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

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

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

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

相等運(yùn)算符

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

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

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

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

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

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

這個運(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

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

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

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

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

顯然,這兩個列表相等但不相同。

總之,==用來檢查兩個對象是否相等,而is用來檢查兩個對象是否相同(是同一個對象)。

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

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。這個函數(shù)的作用與函數(shù)chr相反。

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

>>> "a" < "B"
False

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

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

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

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


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

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

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

至此,你已見過很多返回真值的表達(dá)式(實(shí)際上,考慮到所有值都可解釋為真值,因此所有的表達(dá)式都返回真值),但你可能需要檢查多個條件。例如,假設(shè)你要編寫一個程序,讓它讀取一個數(shù),并檢查這個數(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ù)勞動可不是好事,那么該如何辦呢?很簡單。

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

    六行python代碼的愛心曲線詳解

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

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

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

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

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

    解決python xlrd無法讀取excel文件的問題

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

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

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

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

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

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

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

    淺談Python 中整型對象的存儲問題

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

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

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

最新評論