Task 01 從變量到異常處理(Day1:注釋、變量與數(shù)據(jù)類型夷都、運(yùn)算符眷唉、位運(yùn)算)

一、學(xué)習(xí)內(nèi)容概括

首先附上學(xué)習(xí)地址阿里云天池Python訓(xùn)練營(yíng)
學(xué)習(xí)內(nèi)容如下:

二囤官、具體學(xué)習(xí)內(nèi)容

1.注釋

為程序添加注釋可以提高程序的可讀性冬阳,Python中注釋分為單行注釋多行注釋。同時(shí)党饮,注釋也是調(diào)試程序的一種重要方式肝陪,某些時(shí)候,我們不希望編譯刑顺、執(zhí)行程序中的某些代碼氯窍,這時(shí)就可以將這些代碼注釋掉。

  • 單行注釋
    單行注釋用一個(gè)井號(hào)#表示
# 這是一個(gè)注釋
print("Hello world")

# Hello world
  • 多行注釋
    多行注釋用三個(gè)單引號(hào)''' '''或者三個(gè)雙引號(hào)""" """表示
'''
這是多行注釋蹲堂,用三個(gè)單引號(hào)
這是多行注釋狼讨,用三個(gè)單引號(hào)
這是多行注釋,用三個(gè)單引號(hào)
'''
print("Hello china") 
# Hello china

"""
這是多行注釋柒竞,用三個(gè)雙引號(hào)
這是多行注釋政供,用三個(gè)雙引號(hào) 
這是多行注釋,用三個(gè)雙引號(hào)
"""
print("hello china") 
# hello china

2.運(yùn)算符

  • 算數(shù)運(yùn)算符
名稱 操作符 示例
+ 1+1
- 2-1
* 3*4
/ 3/4
整除 // 3//4
取余 % 3%4
** 2**3
print(1 + 1)  # 2
print(2 - 1)  # 1
print(3 * 4)  # 12
print(3 / 4)  # 0.75
print(3 // 4)  # 0
print(3 % 4)  # 3
print(2 ** 3)  # 8
  • 比較運(yùn)算符
名稱 操作符 示例
大于 > 2>1
大于等于 >= 2>=4
小于 < 1<2
小于等于 <= 5<=2
等于 == 3==4
不等于 !== 3!=5
print(2 > 1)  # True
print(2 >= 4)  # False
print(1 < 2)  # True
print(5 <= 2)  # False
print(3 == 4)  # False
print(3 != 5)  # True
  • 邏輯運(yùn)算符
    and能犯、或or鲫骗、非not
print((3 > 2) and (3 < 5))  # True
print((1 > 3) or (9 < 2))  # False
print(not (2 > 1))  # False
  • 位運(yùn)算符
    位運(yùn)算符可以直接操作數(shù)值的原始bit位,通常在圖形踩晶、圖像處理和創(chuàng)建設(shè)備驅(qū)動(dòng)等底層開發(fā)中使用执泰。Python支持位運(yùn)算符有一下6個(gè):
名稱 操作符 示例
按位與 & 4&5
按位或 4豎5
按位取反 ~ ~4
按位異或 ^ 4^5
左移 << 4<<2
右移 >> 4>>2
print(bin(4))  # 0b100
print(bin(5))  # 0b101
print(bin(~4), ~4)  # -0b101 -5
print(bin(4 & 5), 4 & 5)  # 0b100 4
print(bin(4 | 5), 4 | 5)  # 0b101 5
print(bin(4 ^ 5), 4 ^ 5)  # 0b1 1
print(bin(4 << 2), 4 << 2)  # 0b10000 16
print(bin(4 >> 2), 4 >> 2)  # 0b1 1
  • 三元運(yùn)算符

也叫三目運(yùn)算符,通過if語(yǔ)句來實(shí)現(xiàn)渡蜻。
語(yǔ)法結(jié)構(gòu):

True_statements if  expression else False_statements

運(yùn)算規(guī)則:
先對(duì)邏輯表達(dá)式expression進(jìn)行求職术吝,若為True计济,則執(zhí)行并返回True_statements的值;若為False排苍,則執(zhí)行并返回False_statements的值沦寂。
值得注意的是
Python允許三元運(yùn)算符的True_statements或False_statements中放置多條語(yǔ)句,主要支持兩種放置方式淘衙。第一種传藏,多條語(yǔ)句用英文逗號(hào)隔開,每條語(yǔ)句都會(huì)執(zhí)行彤守,程序返回多條語(yǔ)句的返回值組成的元組毯侦;第二種,多條語(yǔ)句用英文分號(hào)隔開具垫,每條語(yǔ)句都會(huì)執(zhí)行侈离,程序只返回第一條語(yǔ)句的返回值

a = 5
b = 3
st = print('5比3大'), 'a大于b' if a > b else 'a不大于b'
print(st)

#5比3大
#(None, 'a大于b')

因?yàn)?code>print函數(shù)沒有返回值筝蚕,所以返回一個(gè)None

  • 其他運(yùn)算符

主要介紹兩組運(yùn)算符卦碾,一組是 isnot is,另一組是 innot in起宽。
innot in 主要比較某個(gè)對(duì)象在不在某個(gè)序列對(duì)象中洲胖,比如字符串中是否包含了某個(gè)字母,列表中是否包含了某個(gè)元素等等燎含,比較簡(jiǎn)單宾濒。我們主要看下isnot is

比較的對(duì)象是不可變類型:

a = "hello"
b = "hello"
print(a is b, a == b)  # True True
print(a is not b, a != b)  # False False

比較的對(duì)象是可變類型:

a = ["hello"]
b = ["hello"]
print(a is b, a == b)  # False True
print(a is not b, a != b)  # True False

注意

  • is, is not 對(duì)比的是兩個(gè)變量的內(nèi)存地址

  • ==, != 對(duì)比的是兩個(gè)變量的值

  • 比較的兩個(gè)變量屏箍,指向的都是地址不可變的類型(str等)绘梦,那么is,is not==赴魁,卸奉!= 是完全等價(jià)的。

  • 對(duì)比的兩個(gè)變量颖御,指向的是地址可變的類型(list榄棵,dicttuple等)潘拱,則兩者是有區(qū)別的疹鳄。

  • 運(yùn)算符的優(yōu)先級(jí)

  • 一元運(yùn)算符優(yōu)于二元運(yùn)算符。例如3 ** -2等價(jià)于3 ** (-2)芦岂。

  • 先算術(shù)運(yùn)算瘪弓,后移位運(yùn)算,最后位運(yùn)算禽最。例如 1 << 3 + 2 & 7等價(jià)于 (1 << (3 + 2)) & 7腺怯。

  • 邏輯運(yùn)算最后結(jié)合袱饭。例如3 < 4 and 4 < 5等價(jià)于(3 < 4) and (4 < 5)

print(-3 ** 2)  # -9
print(3 ** -2)  # 0.1111111111111111
print(1 << 3 + 2 & 7)  # 0
print(-3 * 2 + 5 / -2 - 4)  # -12.5
print(3 < 4 and 4 < 5)  # True

三呛占、變量與數(shù)據(jù)類型

  • 變量和賦值虑乖、輸出函數(shù)print()

Python是一門弱類型語(yǔ)言,弱類型語(yǔ)言有兩個(gè)典型特征:一是變量無需聲明即可直接賦值晾虑,對(duì)一個(gè)第一次使用的變量賦值就相當(dāng)于定義了一個(gè)新變量疹味;二是變量的數(shù)據(jù)類型可以動(dòng)態(tài)改變,取決于被賦值變量所引用的那個(gè)對(duì)象走贪。

關(guān)于print()函數(shù):

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • 將對(duì)象以字符串表示的方式格式化輸出到流文件對(duì)象file里佛猛。其中所有非關(guān)鍵字參數(shù)都按str()方式進(jìn)行轉(zhuǎn)換為字符串輸出;

  • 關(guān)鍵字參數(shù)sep是實(shí)現(xiàn)分隔符坠狡,比如多個(gè)參數(shù)輸出時(shí)想要輸出中間的分隔字符;

  • 關(guān)鍵字參數(shù)end是輸出結(jié)束時(shí)的字符遂跟,默認(rèn)是換行符\n逃沿;

  • 關(guān)鍵字參數(shù)file是定義流輸出的文件,可以是標(biāo)準(zhǔn)的系統(tǒng)輸出sys.stdout幻锁,也可以重定義為別的文件凯亮;

  • 關(guān)鍵字參數(shù)flush是立即把內(nèi)容輸出到流文件,不作緩存哄尔。

  • 三種簡(jiǎn)單的數(shù)據(jù)類型

整型(int

a = 1031
print(a, type(a))
# 1031 <class 'int'>

浮點(diǎn)型(float

print(1, type(1))
# 1 <class 'int'>

print(1., type(1.))
# 1.0 <class 'float'>

a = 0.00000023
b = 2.3e-7
print(a)  # 2.3e-07
print(b)  # 2.3e-07

對(duì)于浮點(diǎn)型假消,有時(shí)候我們想保留浮點(diǎn)型的小數(shù)點(diǎn)后 n 位×虢樱可以用decimal 包里的 Decimal 對(duì)象和 getcontext() 方法來實(shí)現(xiàn)富拗。

import decimal
from decimal import Decimal
a = decimal.getcontext()
print(a)

# Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
# capitals=1, clamp=0, flags=[], 
# traps=[InvalidOperation, DivisionByZero, Overflow])

getcontext() 顯示了 Decimal 對(duì)象的默認(rèn)精度值是 28 位 (prec=28)

下面通過用 getcontext().prec來調(diào)整精度

b = Decimal(1) / Decimal(3)
print(b)

# 0.3333333333333333333333333333
decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)
print(c)

# 0.3333

布爾型(bool

print(True + True) # 2
print(True + False)  # 1
print(True * False)  # 0
  • 類型轉(zhuǎn)換
  • 轉(zhuǎn)換為整型 int(x, base=10)
  • 轉(zhuǎn)換為字符串 str(object='')
  • 轉(zhuǎn)換為浮點(diǎn)型 float(x)

四、位運(yùn)算

  • 原碼鸣戴、反碼啃沪、補(bǔ)碼

為了計(jì)算的方面(解決減法問題),計(jì)算機(jī)底層使用補(bǔ)碼的形式保存所有整數(shù)窄锅。參考博客原碼创千,反碼,補(bǔ)碼的深入理解與原理入偷。整數(shù)的原碼追驴、反碼、補(bǔ)碼都一樣疏之;負(fù)數(shù)的反碼是將原碼的符號(hào)位不變殿雪,其他位全部取反,補(bǔ)碼就是反碼+1体捏。(反碼的另外一種計(jì)算方式冠摄,將原碼自低位到高位糯崎,尾數(shù)的第一個(gè)‘1’及其右邊的‘0’保持不變,左邊的各位按位取反河泳,符號(hào)位不變沃呢。)

  • 按位運(yùn)算
    1.按位非操作 ~

    ~num的補(bǔ)碼中的 0 和 1 全部取反(0 變?yōu)?1,1 變?yōu)?0)有符號(hào)整數(shù)的符號(hào)位在 ~ 運(yùn)算中同樣會(huì)取反拆挥。

    2.按位與操作 &

    只有兩個(gè)對(duì)應(yīng)位都為 1 時(shí)才為 1

    1. 按位或操作 |

    只要兩個(gè)對(duì)應(yīng)位中有一個(gè) 1 時(shí)就為 1

    4.按位異或操作 ^

    只有兩個(gè)對(duì)應(yīng)位不同時(shí)才為 1薄霜,異或滿足交換律和結(jié)合律

    5.按位左移操作 <<

    num << inum的二進(jìn)制表示向左移動(dòng)i位所得的值。

    6.按位右移操作 >>

    num >> inum的二進(jìn)制表示向右移動(dòng)i位所得的值纸兔。

  • 位運(yùn)算實(shí)現(xiàn)快速計(jì)算

1.計(jì)算2的倍數(shù)問題

n << 1 -> 計(jì)算 n*2
n >> 1 -> 計(jì)算 n/2惰瓜,負(fù)奇數(shù)的運(yùn)算不可用
n << m -> 計(jì)算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 計(jì)算 n/(2^m)汉矿,即除以 2 的 m 次方
1 << n -> 2^n

2.通過 a & (-a) 快速獲取a的最后為 1 位置的整數(shù)崎坊。

00 00 01 01 -> 5
&
11 11 10 11 -> -5
---
00 00 00 01 -> 1

00 00 11 10 -> 14
&
11 11 00 10 -> -14
---
00 00 00 10 -> 2
  • 位運(yùn)算實(shí)現(xiàn)整數(shù)集合

一個(gè)數(shù)的二進(jìn)制表示可以看作是一個(gè)集合(0 表示不在集合中,1 表示在集合中)洲拇。

比如集合 {1, 3, 4, 8}奈揍,可以表示成 01 00 01 10 10 而對(duì)應(yīng)的位運(yùn)算也就可以看作是對(duì)集合進(jìn)行的操作。

元素與集合的操作:

a | (1<<i)  -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 從集合中刪除
a & (1<<i)  -> 判斷 i 是否屬于該集合(零不屬于赋续,非零屬于)

集合之間的操作:

a 補(bǔ)   -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)
  • Python中bin()的輸出
print(bin(3))  # 0b11
print(bin(-3))  # -0b11

print(bin(-3 & 0xffffffff))  
# 0b11111111111111111111111111111101

print(bin(0xfffffffd))       
# 0b11111111111111111111111111111101

print(0xfffffffd)  # 4294967293

Python中bin一個(gè)負(fù)數(shù)(十進(jìn)制表示)男翰,輸出的是它的原碼的二進(jìn)制表示加上個(gè)負(fù)號(hào).

Python中的整型是補(bǔ)碼形式存儲(chǔ)的。

Python中整型是不限制長(zhǎng)度的不會(huì)超范圍溢出纽乱。

所以為了獲得負(fù)數(shù)(十進(jìn)制表示)的補(bǔ)碼蛾绎,需要手動(dòng)將其和十六進(jìn)制數(shù)0xffffffff進(jìn)行按位與操作,再交給bin()進(jìn)行輸出鸦列,得到的才是負(fù)數(shù)的補(bǔ)碼表示租冠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敛熬,隨后出現(xiàn)的幾起案子肺稀,更是在濱河造成了極大的恐慌,老刑警劉巖应民,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件话原,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诲锹,警方通過查閱死者的電腦和手機(jī)繁仁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归园,“玉大人黄虱,你說我怎么就攤上這事∮褂眨” “怎么了捻浦?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵晤揣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我朱灿,道長(zhǎng)昧识,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任盗扒,我火速辦了婚禮跪楞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侣灶。我一直安慰自己甸祭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布褥影。 她就那樣靜靜地躺著池户,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凡怎。 梳的紋絲不亂的頭發(fā)上煞檩,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音栅贴,去河邊找鬼。 笑死熏迹,一個(gè)胖子當(dāng)著我的面吹牛檐薯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播注暗,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼坛缕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了捆昏?” 一聲冷哼從身側(cè)響起赚楚,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骗卜,沒想到半個(gè)月后宠页,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寇仓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年举户,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遍烦。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俭嘁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出服猪,到底是詐尸還是另有隱情供填,我是刑警寧澤拐云,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站近她,受9級(jí)特大地震影響叉瘩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泄私,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一房揭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晌端,春花似錦捅暴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漆羔,卻和暖如春梧奢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背演痒。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工亲轨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸟顺。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓惦蚊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讯嫂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹦锋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361