中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-04 22:55:37 來源:腳本之家 閱讀:463 作者:呆萌的代Ma 欄目:開發技術

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

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

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

這是正確的代碼:

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

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

1.條件和條件語句

在編寫的程序中,語句都是逐條執行的。現在更進一步,讓程序選擇是否執行特定的語句塊。

1 )布爾值的用武之地

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

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

False None 0 "" () [] {}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3)else 子句

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

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

在這里,如果沒有執行第一個代碼塊(因為條件為假),將進入第二個代碼塊。

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

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

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

6)更復雜的條件

1. 比較運算符

在條件表達式中,最基本的運算符可能是比較運算符,它們用于執行比較。

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

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

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

與賦值一樣,Python也支持鏈式比較:可同時使用多個比較運算符,如0 < age < 100。有些比較運算符需要特別注意

相等運算符

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

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

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

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

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

is:相同運算符

這個運算符很有趣,其作用看似與==一樣,但實際上并非如此。

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

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

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

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

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

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

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

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

in:成員資格運算符

與其他比較運算符一樣,它也可用于條件表達式中。

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".') 

字符串和序列的比較

字符串是根據字符的字母排列順序進行比較的。

>>> "alpha" < "beta"
True

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

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

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

>>> "a" < "B"
False

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

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

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

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


如果序列的元素為其他序列,將根據同樣的規則對這些元素進行比較。

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

2. 布爾運算符

至此,你已見過很多返回真值的表達式(實際上,考慮到所有值都可解釋為真值,因此所有的表達式都返回真值),但你可能需要檢查多個條件。例如,假設你要編寫一個程序,讓它讀取一個數,并檢查這個數是否位于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!')

這可行,但有點笨拙,因為輸入了print('Wrong!')兩次。重復勞動可不是好事,那么該如何辦呢?很簡單。

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

通過使用鏈式比較1 <= number <= 10可進一步簡化這個示例。

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

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

短路邏輯和條件表達式

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

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝义市| 宜州市| 定陶县| 札达县| 阳曲县| 屯留县| 麻江县| 吉安市| 东丰县| 霍林郭勒市| 磐石市| 和静县| 新郑市| 潞城市| 宜州市| 称多县| 武宁县| 剑河县| 台湾省| 临清市| 蓬溪县| 合阳县| 栾城县| 白城市| 社会| 宁乡县| 通辽市| 景宁| 塘沽区| 汤原县| 长泰县| 砀山县| 武平县| 鹰潭市| 五大连池市| 钟山县| 武宁县| 科尔| 西乌| 谢通门县| 沙洋县|