2.1 計算機(jī)會算術(shù)
1.數(shù)值運(yùn)算
話不多說篙耗,直接上代碼解釋:
1+9 #加法迫筑。結(jié)果為10
1.3-5 #減法宪赶。結(jié)果為-3.7
3*7 #乘法。結(jié)果為21
7.5/1.5 #除法脯燃。結(jié)果為5.0
2**3 #乘方搂妻。結(jié)果為8
14%3 #取余。結(jié)果為2
那么辕棚,我們?nèi)绻鉀Q一些實際的算術(shù)問題時欲主,不可能只單用一種運(yùn)算符。例如:存入超級銀行10000元逝嚎,年利率為10%扁瓢,進(jìn)行復(fù)利計算,兩年后本息和為多少补君?
假定利率不變涤妒,那么十年后取出本息和進(jìn)行投資,每月投資5000元赚哗,不足5000時將剩余的錢存入銀行,問可以連續(xù)投資幾個月硅堆,剩余的錢有多少屿储?
10000*(1+0.1)**2+10000 #結(jié)果為22100.0,本息和為2萬2千1百元
(10000*(1+0.1)**10+10000)%5000 #結(jié)果為937.4246010000206,剩余約937.425元
((10000*(1+0.1)**10+10000)-(10000*(1+0.1)**10+10000)%5000)/5000 #結(jié)果為7.0渐逃,即可以連續(xù)投資7個月
除了常見的數(shù)值運(yùn)算以外够掠,字符串也可以進(jìn)行加法運(yùn)算,它會起到連接的作用:
"I like Python"+",but just like it" #連接成"I like Python,but just like it"
那么一個字符串與一個整數(shù)進(jìn)行乘法運(yùn)算(對字符串的重復(fù)):
"HHH "*2 #結(jié)果為"HHH HHH "
2.數(shù)值運(yùn)算
在Python中我們使用True和False兩個關(guān)鍵詞表示真假茄菊,它們被稱為布爾型疯潭。那么Python的邏輯運(yùn)算有如下:
“與”運(yùn)算
True and True #結(jié)果為True
False and True #結(jié)果為False
False and False #結(jié)果為False
"或"運(yùn)算
True or True #結(jié)果為True
True or False #結(jié)果為True
False or False #結(jié)果為False
“非”運(yùn)算
not True #結(jié)果為False
簡單記憶:一假與假,一真或真
3.判斷表達(dá)式
用數(shù)學(xué)形式寫出來的命題面殖,Python代碼如下:
1.0 == 1.0 #結(jié)果為True,==,等于
2.0 != 2 #結(jié)果為False,!=,不等于
5 < 3 #結(jié)果為False,<,小于
5 <= 2 #結(jié)果為False,<=,小于等于
5 > 3 #結(jié)果為True,>,大于
6 >= 4 #結(jié)果為True,>=,大于等于
利用上面超級銀行的例子竖哩,若十年后拿出去投資的錢可確定獲得60%本金的利潤,現(xiàn)在我想要將來得到50000元脊僚,那么現(xiàn)在有兩個選擇相叁,一個是10年后進(jìn)行投資,一個是15年后取出本息辽幌,那么問這兩個選擇都可以實現(xiàn)我的愿望嗎增淹?
10000*(1+0.1)**15+10000 >= 50000 and ((10000*(1+0.1)**10+10000)-(10000*(1+0.1)**10+10000)%5000)*(1+0.6) >=50000
結(jié)果是True,當(dāng)然可以乌企,畢竟是超級銀行虑润!
4.運(yùn)算優(yōu)先級
運(yùn)算有先后,先乘除后加減加酵,判斷再邏輯拳喻,括號要先行:
括號:()
乘方:**
乘除:* /
加減:+ -
判斷:== > >= < <=
邏輯:哭当! and or
關(guān)于其他:
關(guān)于Python的運(yùn)算符,還有位運(yùn)算符舞蔽、成員運(yùn)算符荣病、身份運(yùn)算符,但是不那么常用渗柿,我便簡單列一下个盆,了解一下:
位運(yùn)算符:
"& " :按位與運(yùn)算
" | " :按位或運(yùn)算
" ^ " :按位異或運(yùn)算
"~" :按位取反運(yùn)算
"<<" :左移動運(yùn)算符
">>" :右移動運(yùn)算符
成員運(yùn)算符:
in 如果在指定的序列中找到值返回True,否則返回 False
not in 如果在指定的序列中沒有找到值返回True,否則返回False
身份運(yùn)算符:
is 判斷兩個標(biāo)識符是不是引用自一個對象
is not 判斷兩個標(biāo)識符是不是引用自不同對象
2.2 計算機(jī)記性好
1. 賦值
用變量的方式進(jìn)行數(shù)據(jù)的存儲朵栖,以便在后面重復(fù)使用颊亮,使得數(shù)據(jù)保留而不會消失,這是一場變量革命陨溅。而實現(xiàn)的這一過程被稱為賦值终惑。還是用代碼解釋吧!
yourmoney = 10000
mymoney = yourmoney*(1+0.5)
print(mymoney) #打印結(jié)果是15000.0
以上說明了门扇,你有10000元雹有,我的錢是你把本金交給我,還得給我50%本金的利息臼寄。如果你有更多或更少的錢霸奕,就可以修改10000這個數(shù)值或者進(jìn)行加減,以達(dá)到要求和目的吉拳。
2.變量的類型
前面有涉及到的整形质帅、浮點(diǎn)型、布爾型留攒、字符串都是數(shù)據(jù)類型煤惩,我們可以把各種類型的數(shù)據(jù)賦予同一變量:
s = 5
print(s) #s存儲的內(nèi)容為整數(shù)5
s = "i love Python"
print(s) #s存儲的內(nèi)容從整形變?yōu)樽址?s = 10.0
print(s) #然后變成浮點(diǎn)型
s = 1 > 2
print(s) #最后變成布爾型
Python能自由改變變量類型的特征被稱為動態(tài)類型;
不能改變變量類型的特征被稱為靜態(tài)類型炼邀。
3.序列
序列和詞典同屬容器型變量魄揉。序列包含的一個數(shù)據(jù)被稱為元素。序列又可以分為元組(Tuple)和列表(List)汤善,它們的區(qū)別主要是:元組建立之后各個元素不可再變更什猖,而列表可變。創(chuàng)建元組和列表的方式如下:
tuple = (1,2.0,'python',233,False) #一個元組
list = [False,4,'yeah',2.0] #一個列表
type(tuple) #結(jié)果為'tuple'
type(list) #結(jié)果為'list'
由上可知红淡,序列中是可以包含不同類型的元素的不狮,所以嵌套(套娃)是可以實現(xiàn)的:
list1 = [1,[2,3,4,[5,6,7]]] #列表中嵌套另一個列表,另一個列表嵌套另一個列表
因為元組不能變在旱,所以一般不創(chuàng)建空元組摇零,而經(jīng)常創(chuàng)建空列表,一般用來準(zhǔn)備儲存一些數(shù)據(jù)桶蝎,相當(dāng)于準(zhǔn)備一個袋子:
empty_list = [] #創(chuàng)建空表
關(guān)于如何讀取序列驻仅,當(dāng)然是使用下標(biāo)(index)來讀取“袋子”里的元素了:
tuple[0] #結(jié)果為1
list[2] #結(jié)果為‘yeah’
list1[1][3][0] #結(jié)果為5
對于列表谅畅,可以對其中的元素進(jìn)行賦值改變,而元組上面說了不可以變噪服,所以不能進(jìn)行以下操作毡泻。
list[1] = 2.0
list #列表第二個元素從整型4變浮點(diǎn)型2.0了
對于單個元素的查找,是上面的操作粘优,而多元素呢仇味?多元素的尋找可以遵循以下基本樣式:
序列名[下限:上限:步長]
下限就是下標(biāo)起始,上限就是下標(biāo)結(jié)尾雹顺,步長就是按多少間隔來找元素丹墨。引用的多個元素會自成一個新的序列:
tuple[:5] #從下標(biāo)0到下標(biāo)4的所有元素
tuple[2:] #從下標(biāo)2到最后一個元素
tuple[0:5:2] #下標(biāo)為0,2嬉愧,4的元素
m=tuple[2:0:-1] #從下標(biāo)2到下標(biāo)1
type(m) #范圍引用的結(jié)果還是一個元組
表的范圍引用效果完全與上相同(范圍引用的上限元素是不包括在結(jié)果內(nèi)的)
尾部引用語法贩挣,用于序列尾部的元素:
tuple[-1] #序列最后一個元素
tuple[-3] #序列倒數(shù)第三個元素
tuple[1:-1] #序列的第二個到倒數(shù)第二個元素
序列的好處是可以有序地儲存一組數(shù)據(jù)。一些數(shù)據(jù)本身具有有序性没酣,就可以儲存在序列中王财。
4.詞典
創(chuàng)建詞典:
dict = {"Attack":100,"Defense":59,"Health":250}
type(dict)
詞典由鍵值對組成,詞典的對應(yīng)鍵的值(value)可以通過鍵(key)來引用:
dict["Attack"] #結(jié)果為100
詞典的修改或增添:
dict["Attack"] = 88
dict["magic"] = 99
dict # 結(jié)果為{"Attack":88,"Defense":59,"Health":250,"magic":99}
構(gòu)建空詞典:
dict={}
dict #結(jié)果為{}
詞典與序列不同裕便,它不具備連續(xù)有序性搪搏,適用于存儲結(jié)構(gòu)松散的一組數(shù)據(jù)。
2.3 計算機(jī)懂選擇
1.if結(jié)構(gòu)
假如到超級銀行存錢闪金,若存的本金超過5000就按10%的年利率結(jié)算利息,否則就按5%的年利率進(jìn)行結(jié)算论颅。那么哎垦,直接上代碼:
money = 5001
if money > 5000:
annual_rate = 0.1
else:
annual_rate = 0.05
print(annual_rate) #輸出0.1
當(dāng)然,if和else后面也可跟多行代碼恃疯,在此便不進(jìn)行贅述了漏设。
而else也并非必需的,無else即是else為空今妄,if后的條件若不成立郑口,就什么也不做。
2.縮進(jìn)
冒號的強(qiáng)制縮進(jìn)其實說明了代碼塊的歸屬權(quán)盾鳞,與C語言中的大括號是一樣的效果犬性,例如:
if i > 0:
x=1
y=2
即說明這x=1和y=2是屬于if的,如果if后條件成立腾仅,就執(zhí)行這個程序塊乒裆。
如果是這樣:
if i > 0:
x=1
y=2
那么,無論如何y=2都會被執(zhí)行推励,而x=1只有在if后條件成立之后才能執(zhí)行鹤耍。
3.if的嵌套與elif
其實elif可以視作else if肉迫,顧名思義就是另外的如果,畢竟一個if只能容納一個條件稿黄,多個elif就是為了容納更多的條件喊衫,形成多個分支,構(gòu)成不同的輸出結(jié)果杆怕。示例代碼:
i=1
if i > 0: #因為i=1族购,則執(zhí)行這部分代碼
print("hhhhhh")
i = i+1
elif i == 0: #不執(zhí)行
print("i is 0")
i = i*10
else: #不執(zhí)行
print("hiahiahia")
i = i-1
嵌套:
i=5
if i > 1: #條件成立,執(zhí)行內(nèi)部代碼
print("hahahahahaha")
if i > 2: #條件也成立财著,也執(zhí)行其內(nèi)部代碼
print("hhhhhh")
if的嵌套联四,先對最外面的if進(jìn)行判斷,條件成立后執(zhí)行附屬的內(nèi)部代碼撑教,其中就包括了嵌套的if朝墩,于是對它后面的條件再行判斷,然后......(就是可以無限套娃了伟姐!)
2.4 計算機(jī)能循環(huán)
1.for循環(huán)
循環(huán)用于重復(fù)執(zhí)行一些程序塊收苏。
for循環(huán)有如下示例:
for i in [3,4,5.0,"python"]
print(i) #依次打印列表里的各個元素
對上面代碼進(jìn)行總結(jié)歸納出for的一個基本用法:
for 變量 in 序列:
????statement
序列中有多少個元素,就重復(fù)多少次愤兵。如果只是想重復(fù)次數(shù)鹿霸,而不想創(chuàng)建序列,就如下:
for i in range(6):
print("Hello python!") #打印六次"Hello python!"
for后面跟的變量i是起到計數(shù)功能的:
for i in range(6):
print(i,"Hello python!") #打印序號和"Hello python!"
用for循環(huán)來做一個實用例子秆乳,假如在超級銀行存了10000元懦鼠,存10年,每年利率為固定10%屹堰,那么每年的本息和有多少肛冶?用for循環(huán)進(jìn)行計算:
money = 10000
for i in range(11):
interest = money*(1+0.1)**i
print("第",i,"年的利息:",interest)
2.while循環(huán)
while是另外一種循環(huán)結(jié)構(gòu),其用法如下:
i = 0
while i < 10:
print(i)
i += 1 #從0打印到9
while的結(jié)構(gòu)其實和if相似扯键,同樣后面跟著條件睦袖,但這個條件不是一次性的,而是循環(huán)使用的荣刑,直到條件不成立才會跳出整個循環(huán)馅笙。
無限循環(huán):
while True:
print("Hello World!")
循環(huán)實現(xiàn)了相同代碼的重復(fù)執(zhí)行
3.跳過或終止
continue????#跳過當(dāng)前的循環(huán),進(jìn)入下一循環(huán)
break????#跳出整個循環(huán)
進(jìn)行綜合性應(yīng)用來說明吧!
for i in range(10):
if i == 2:
continue
print(i) #打印0厉亏、1董习、3、4爱只、5阱飘、6、7、8沥匈、9蔗喂,跳過了2
for i in range(10):
if i == 2:
break
print(i) #只打印0和1
練習(xí)
最后,做一個綜合性的練習(xí)來重溫一下:
假設(shè)可以全額貸款買房高帖,房子總價120萬缰儿,為吸引購房者,房貸前7年利率有折扣散址,分為為1%乖阵、1.5%、2%预麸、3%瞪浸、3.5%、4%吏祸、4.2%对蒲,其余年份的房貸年利率皆為5%,若我逐年還款贡翘,每次最多還5萬元蹈矮,那么還清需要幾年?
以下代碼作為參考:
i = 0
total = 1200000.0
repay = 50000.0
tuple = (0.01,0.015,0.02,0.03,0.035,0.04,0.042)
while total > 0:
i = i + 1
print("我太難了!今年是第",i,"年還是要還款的C泛鸟!")
if i <= 7:
interest = tuple[i - 1]
else:
interest = 0.05
total = total*(interest + 1) - repay
break
print("yeah!第",i + 1,"年,終于還完了踊东!哈哈哈哈哈1崩摹!")
恭喜你第9年就還完了U⒊帷碑韵!(你其實還在做夢)