3、運算符棚菊、字符串浸踩、分支

Lesson_3


【5】位運算符

位運算符:按位運算符是把數(shù)字看做二進制數(shù)來進行計算
& 按位與運算符

相應的位數(shù)都為1,則該位的結果是1统求,否則為0

print(5 & 7)
'''
5 ->101
7 ->111


101
111
————
101

101->5
'''
>>>5

| 按位或運算符

兩個二進制位有一個位1時检碗,結果為1


print(5 | 7)

'''
101
111
---
111
'''

>>>7

^ 按位異或運算符

二進制的兩位相異時,結果為1


print(5 ^ 7)

'''
101
111
---
010
'''
>>>2

~ 按位翻轉運算符

將二進制數(shù)+1之后乘以-1


print(~5)
'''
~101
___
(101+1) * -1
___
(0110) * -1
___
-0110
>>>-6

<< 左移動運算符

各二進制位全部左移動若干位码邻,由<<右側的數(shù)字決定后裸,高位丟棄,低位補0

方法: X<<N 將一個數(shù)字X所對應的二進制數(shù)向左移動N位.

print(2 << 2)

'''
 0010
___
 1000
'''

>>>8

>> 右移動運算符

各二進制位全部右移動若干位冒滩,由>>右側的數(shù)字決定

方法: X>>N 將一個數(shù)字X所對應的二進制數(shù)向右移動N位.

print(8 << 2)

'''
 1000
___
 0010

'''

>>>2

【6】比較運算符

比較運算符根據(jù)表達式值得真假返回布爾值微驶。

格式: 表達式1 關系運算符 表達式2

== != > < >= <=

python在布爾值處理上有些不同,True等于整數(shù)1开睡,F(xiàn)alse等于整數(shù)0


#全等于因苹,包括數(shù)據(jù)類型,布爾型的
print(1 == 2)      >>>False
print(1 == '1')    >>>False
print(1 == True)   >>>True
#不等于
print(1 != 2)      >>>True
print(0 != False)  >>>False
print(1 != '1')    >>>True
#大于
print(1 > 2)       >>>False
print(True > False) >>>True
#小于
print(3 < 8)       >>>True
print(True < False) >>>False
#大于等于
print(True >= False) >>>True
print(1 >= True)  >>>True
#小于等于
print(3.14 <= 3.14)  >>>Ture
print(math.ceil(math.pi) <= math.floor(math.pi)) >>>False

邏輯運算符

邏輯操作符包括andor篇恒、not

邏輯與:and操作符左邊的操作符為真扶檐,右邊也為真,那么結果為真胁艰。

and執(zhí)行的是一個串聯(lián)的短路原則款筑,一個地方壞了都換了(悲觀原則)


a = 0
b = 1
print(a==0 and b==1)
print(a==0 and b==2)

>>>True
>>>False

邏輯與:or操作符只需要左邊或右邊有一個為真,那么結果為真腾么。

or是一個并聯(lián)的原則奈梳,其它的短路了我這里依然是好的于宙,只要一個是好的那就是好的(樂觀原則)


a = 0
b = 1
print(a==2 and b==12)
print(a==0 or b==2)

>>>False
>>>True

邏輯非:not操作符是一個一元操作符旺上,它的作用是得到一個和操作符相反的布爾類型。


a = 0

print(not a==1)
print(not a==0)

#這里相當于 !=

>>>True
>>>False

【7】成員運算符

成員運算符包括in锅睛、not in,從字義上可以看,他是判斷在什么里面和不在什么里面铜邮,返回一個布爾值运褪。

格式: x in y x not in y

a = 'qwert'

print('e' in a)
print('e' not in a)

>>>True
>>>False

【8】身份運算符

身份運算符包括isis not劣欢,判斷標識符是不是引用同一個對象棕诵。

格式: x is y x is not y

a = None
b = 333
c = 233
print(a is None)
print(b is not None)
print(c is 233)


>>>True
>>>True
>>>True

第六章

【1】字符串

到目前為止,我們所認知的在字符串就是引號內(nèi)的一切東西凿将,我們把字符串叫做文本校套,文本和數(shù)字是截然不同。

python創(chuàng)建字符串的時候牧抵,必須要加上引號笛匙,單引號也可以雙引號也可以犀变,python一點也不挑膳算,
但是你不能一邊用單引號,一邊用雙引號弛作,這樣語法就會報錯了涕蜂。


print('python")

>>>SyntaxError: EOL while scanning string literal

我們以前提到過拼接,兩個數(shù)字叫相加映琳,兩個字符串相加叫拼接机隙。


print('5' + '8')

>>>58

那如果在字符串內(nèi)容中需要用到單引號怎么辦了?


print('Let's go')


>>>SyntaxError: invalid syntax

有一種方法萨西,只要用上不同的引號有鹿,python就不會誤解你的意思了


print("Let's go")

>>>Let's go

【2】原始字符串

反斜杠是一個好東西,但是我們試一試C:\now


print('C:\now')

>>>C:
>>>ow

#因為 \n  在計算機里是 回車鍵

那如何才能正常的去打踊迅葱跋?


print('C:\\now')

>>>C:\now

# 反斜杠(\)代表轉義的意思

但是如果一個路徑里面有很多的\那我么一個一個的輸入就不樂意了,這時候我們就可以使用 原始字符串 了,
只需要在字符串前面加一個英文字母r即可:


string = r'C:\now\start'

print(string)

>>>C:\now\start

使用字符串的時候需要注意一點:無論是否是原始字符串源梭,都不能以反斜杠結尾娱俺。(反斜杠放在字母的結尾表示還沒有結束,換行繼續(xù)的意思)

如果你繼續(xù)操作就會報錯:


string = r'C:\now\start\'
print(string)

>>>SyntaxError: EOL while scanning string literal

【3】長字符串

如果你希望得到一個跨多行的字符串废麻,例如:


從明天起, 做一個幸福的人 
喂馬, 劈柴, 周游世界 
從明天起, 關心糧食和蔬菜 
我有一所房子, 面朝大海, 春暖花開  
從明天起, 和每一個親人通信 
告訴他們我的幸福 
那幸福的閃電告訴我的 
我將告訴每一個人 
給每一條河每一座山取一個溫暖的名字 
陌生人, 我也為你祝福 
愿你有一個燦爛的前程 
愿你有情人終成眷屬 
愿你在塵世獲得幸福 
而我只愿面朝大海, 春暖花開

這是一首好詩荠卷,但是如果要打印出來,那就需要用到很多的換行符:

print("從明天起, 做一個幸福的人\n喂馬, 劈柴, 周游世界\n從明天起, 關心糧食和蔬菜\n我有一所房子, 面朝大海, 春暖花開\n\n從明天起, 和每一個親人通信\n告訴他們我的幸福\n那幸福的閃電告訴我的\n我將告訴每一個人\n\n給每一條河每一座山取一個溫暖的名字\n陌生人, 我也為你祝福\n愿你有一個燦爛的前程\n愿你有情人終成眷屬\n愿你在塵世獲得幸福\n而我只愿面朝大海, 春暖花開")

這樣會給我們帶來很多困擾烛愧,好在python里面有長字符串油宜,只需要三個引號包裹起來掂碱,不管是三個單引號還是雙引號。


print('''
從明天起, 做一個幸福的人 
喂馬, 劈柴, 周游世界 
從明天起, 關心糧食和蔬菜 
我有一所房子, 面朝大海, 春暖花開  
從明天起, 和每一個親人通信 
告訴他們我的幸福 
那幸福的閃電告訴我的 
我將告訴每一個人 
給每一條河每一座山取一個溫暖的名字 
陌生人, 我也為你祝福 
愿你有一個燦爛的前程 
愿你有情人終成眷屬 
愿你在塵世獲得幸福 
而我只愿面朝大海, 春暖花開
''')

【4】字符串運算

字符串拼接


str1 = '你好'
str2 = '世界'
str3 = str1 + str2

print(str3)

>>>你好世界

重復字符串


str1 = '你好'
str2 = '世界'
str3 = str1 + str2

print(str3 * 3 )

>>>你好世界
>>>你好世界
>>>你好世界

訪問字符串中的某一個字符

通過索引下標查找字符慎冤,索引從0開始

str1 = 'hello word,hello shanghai'
print(str1[1])
print(str1[-1])

>>>e
>>>i

字符串的不可變性質

str1 = 'hello word,hello shanghai'
str1[1] = 'a'
print(str1)

>>>TypeError: 'str' object does not support item assignment

返回截取字符串中的一部分

語法 str[start:length:skip]

start表示從下表幾開始疼燥,length表示截取長度,skip表示隔幾位截取一次

str1 = 'hello word,hello shanghai'
print(str1[0:7])     #從0開始取7個
print(str1[0::2])    #從0開始取全部蚁堤,隔2個取一次
print(str1[::3])     #默認從0開始醉者,隔3個取一次
print(str1[-10::2])  #從倒數(shù)第10個開始,隔2個取一次违寿,如果是倒取得話湃交,不能取指定長度


>>>hello w
>>>hlowr,el hnhi
>>>hlwdeohgi
>>>osaga

返回翻轉字符串結果

str1 = 'hello word,hello shanghai'

print(str1[::-1])

>>>iahgnahs olleh,drow olleh

#翻轉以后不影響原來的str1內(nèi)存中的值,而是使用一次以后就被回收了

返回去除的空格結果


str1 = ' aleX '
print(str1.lstrip()) #left strip  去除左邊的空格
print(str1.rstrip()) #right strip  去除右邊的空格
print(str1.strip())  #strip 去除兩邊的空格


判斷是不是以什么開頭


str1 = 'abcde'

print(str1.startswith('ab')) #結果正確返回布爾值

>>>True

判斷以什么結尾


str1 = 'abcde'

print(str1.endswith('de')) #結果正確返回布爾值

>>>True


>>>True

返回替換字符

語法:str. replace(i,j,k)

i代表被替換字符藤巢,j代表準備替換的字符搞莺,k代表替換的次數(shù),替換的方向是自左向右去查找


str1 = 'abcdeabcd'

print(str1.replace('a','A'))
print(str1)

>>>AbcdeAbcd
>>>abcdeabcd

#默認替換所有的

str1 = 'abcdeabcd'

print(str1.replace('a','A'掂咒,1))
print(str1)

>>>Abcdeabcd
>>>abcdeabcd

#替換了一次

返回分割字符

語法:str.split(i,k)

i代以什么為分割符的才沧,k代表分割次數(shù),分割自左向右運行,返回一個列表(類型)后面會學習到,被設定為分隔符的字符不會出出現(xiàn)在列表中绍刮。


str1 = 'abcdeabcd'

print(str1.split('d'))

>>>['abc', 'eabc', '']

#默認全部分割

str1 = 'abcdeabcd'

print(str1.split('d'温圆,1))

>>>['abc', 'eabcd']

#添加第二個參數(shù),分割一次

返回全大寫


str1 = 'abcdeabcd'

print(str1.upper())

>>>ABCDEABCD

返回全小寫


str1 = 'ABCDEABCD'

print(str1.lower())

>>> abcdeabcd

返回首字母大寫


str1 = 'abcdabcd'

print(str1.capitalize())

>>>Abcdabcd

str1 = 'ABCDABCD'

print(str1.title())

>>> Abcdabcd
str1 = 'abcdabcd'

print(str1[0].upper()+str1[1:])

>>> Abcdabcd

返回首字母小寫


str1 = 'ABCDABCD'

print(str1[0].lower()+str1[1:])

>>>aBCDABCD

判斷是否是全大寫

返回布爾值,如果是空字符串返回False

str1 = 'ABCDABCD'

print(str1.isupper())

>>>Ture

判斷是否是全小寫

返回布爾值,如果是空字符串返回False

str1 = 'abcdabcd'

print(str1.islower())

>>>Ture

判斷首字母大寫

返回布爾值,如果是空字符串返回False

但是python沒有給我們提供iscapitalize()的方法

str1 = 'Abcdabcd'

print(str1.istitle())

>>>Ture

返回以什么分割的字符

語法:'i'.jion(j)

i代表分割的符號孩革,j代表被分割的字符

str1 = 'abcdabcd'

print(','.join(str1))

>>>a,b,c,d,a,b,c,d

#以逗號分割

【5】占位符

為什么需要占位符岁歉,因為變量在引號里面會被看成一個字符串,那么python就不會解析膝蜈。

語法格式:


'字符串 %s' % 變量或'字符'

'字符串%s %d %f'%(變量1锅移,變量2,變量3)

python的占位符包括:


%s   #代表str

%d   #代表int

$f   #代表float

打印字符串

num = 'Tom'
print ("His name is %s"%num)

>>>His name is Tom

#如果變量里面是個數(shù)字那么使用了%s也會解析成字符

打印整數(shù)

num = 2
print ("1 +1 = %d"%num)

>>>1 +1 = 2

#如果變量里面是個字符串那么使用了%d會 報類型錯

打印浮點數(shù)

num = 2.5
print ("1.5 +1 = %f"%num)

>>>1.5 +1 = 2.500000

#如果變量里面是個字符串那么使用了%f會 報類型錯,如果是整數(shù)會自動轉換成浮點數(shù)

打印浮點數(shù)(指定保留小數(shù)點位數(shù))

語法:'字符串 %1.1f' % 變量

num = 2.5
num1 = 16.5
print ("1.5 +1 = %.1f"%num)
print ("15.5 +1 = %0.2f"%num1)

>>>1.5 +1 = 2.5
>>>15.5 +1 = 16.50

#如果是整數(shù)相加饱搏,并且使用%.0f非剃,那么會四舍五入
#雙進度的不會影響整數(shù)部分

<font color='red'>注意:</font>

python 在四舍五入的時候會出現(xiàn)奇怪的問題,0.5問題,整數(shù)部分為偶數(shù)推沸,0.5則被舍去备绽,整數(shù)部分為奇數(shù),0.5則進1鬓催,這只是單精度的浮點數(shù)問題肺素。

num1 = 1.5
num2 = 2.5
num3 = 3.5
num4 = 4.5

print ("0.5 +1 = %.0f"%num1)
print ("1.5 +1 = %.0f"%num2)
print ("2.5 +1 = %.0f"%num3)
print ("3.5 +1 = %.0f"%num3)

>>>0.5 +1 = 2
>>>1.5 +1 = 2
>>>2.5 +1 = 4
>>>3.5 +1 = 4

雙進度的浮點數(shù)問題(了解)

雙進度的浮點問題和但進度不一樣

python的 BigDecimal.ROUND_HALF_UP與ROUND_HALF_DOWN機制(了解)

由于 python3 包括python2.7 以后的round策略使用的是decimal.ROUND_HALF_EVEN 
即Round to nearest with ties going to nearest even integer. 也就是只有在整數(shù)部分是奇數(shù)的時候, 小數(shù)部分才逢5進1深浮; 偶數(shù)時逢5舍去压怠。 這有利于更好地保證數(shù)據(jù)的精確性, 并在實驗數(shù)據(jù)處理中廣為使用飞苇。

但如果一定要decimal.ROUND_05UP 即Round away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise round towards zero. 也就是逢5必進1需要設置float為decimal.Decimal, 然后修改decimal的上下文

import decimal
context=decimal.getcontext() # 獲取decimal現(xiàn)在的上下文
context.rounding = decimal.ROUND_05UP

print(round(decimal.Decimal(2.55), 1)) # 2.6
print(format(decimal.Decimal(2.55), '.1f')) #'2.6'
print ("3.5 +1 = %.0f"%decimal.Decimal(2.55)) #3

指定占位符寬度


print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))

指定占位符寬度(左對齊)

左對齊就是在%后面加-


print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))

指定占位符(只能用0當占位符)

如果堅持用其它的字符或數(shù)字作占位符菌瘫,那么輸出的時候為空


print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))

科學計數(shù)法(以前提過)


format(0.0015,'.2e')

條件分支

大家在前面的學習已經(jīng)接觸過if-else了,它就是一個條件分支布卡。

比如在網(wǎng)絡游戲中雨让,打在在NPC領取任務鲸伴,在領取任務的時候都會給你幾個選擇或者是退出岸霹,那它是怎么實現(xiàn)的了,就是通過條件分支

我們先來個小游戲

規(guī)則:給你一個隨機數(shù)字设凹,你猜到就夸你一句贸街,你猜錯了諷刺就你一句庵寞;


#首先我們引入隨機庫
from random import randint

ran = randint(1,100)  

guess =  int(input("你猜猜我有幾根手指:"))   #用戶輸入的數(shù)字傳遞進來以后默認是字符串,所以要轉成int

if guess == ran:
    print("Y*^_^*Y 哇你猜對了 給你一個??")
else:
    print("你可真笨??")

while循環(huán)

循環(huán)對于一般人是很難理解的薛匪。比如游戲捐川,超級瑪麗,當你掛了逸尖,游戲會重新開始古沥,而且規(guī)定了你有幾次從新開始的機會,這就是while循環(huán)娇跟。

但是這次你要是猜不對就要一直猜

但是我們要給點提醒

while結合if-else小案例


res = 1234567

guess = int(input('猜一下中獎號碼:'))

while guess != res:

    guess = int(input('不對不對岩齿,再猜,再猜:'))

    if guess == res:
        print("Y*^_^*Y 哇你猜對了 ")
        print('不過毛都沒有!')
    else:
        print('在用兩塊錢試試')

print("(*@ο@*) 哇~這么厲害一次就猜對了0m锷颉!")

不過else還可以和while配合使用:


count = 0
while count < 5:
   print(count, " 小于5")
   count = count + 1
else:
   print (count, " 不小于5 ")
   
#在條件不滿足時觸發(fā)else

str = r'C:\Program Files\FishC\Good'

如果非要在原始字符串結尾輸入反斜杠吃谣,如何可以靈活處理乞封?


str1 = r'C:\Program Files\FishC\Good'"\\"
print(str1)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市基协,隨后出現(xiàn)的幾起案子歌亲,更是在濱河造成了極大的恐慌,老刑警劉巖澜驮,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陷揪,死亡現(xiàn)場離奇詭異,居然都是意外死亡杂穷,警方通過查閱死者的電腦和手機悍缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耐量,“玉大人飞蚓,你說我怎么就攤上這事±妊眩” “怎么了趴拧?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵溅漾,是天一觀的道長。 經(jīng)常有香客問我著榴,道長添履,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任脑又,我火速辦了婚禮暮胧,結果婚禮上,老公的妹妹穿的比我還像新娘问麸。我一直安慰自己往衷,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布严卖。 她就那樣靜靜地躺著席舍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妄田。 梳的紋絲不亂的頭發(fā)上俺亮,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音疟呐,去河邊找鬼脚曾。 笑死,一個胖子當著我的面吹牛启具,可吹牛的內(nèi)容都是我干的本讥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲁冯,長吁一口氣:“原來是場噩夢啊……” “哼拷沸!你這毒婦竟也來了?” 一聲冷哼從身側響起薯演,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤撞芍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跨扮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體序无,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年衡创,在試婚紗的時候發(fā)現(xiàn)自己被綠了帝嗡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡璃氢,死狀恐怖哟玷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情一也,我是刑警寧澤巢寡,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布喉脖,位于F島的核電站,受9級特大地震影響讼渊,放射性物質發(fā)生泄漏动看。R本人自食惡果不足惜尊剔,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一爪幻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧须误,春花似錦挨稿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祭椰,卻和暖如春臭家,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背方淤。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工钉赁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人携茂。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓你踩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讳苦。 傳聞我的和親對象是個殘疾皇子带膜,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354