回顧----(1)
好幾天沒有更博了,謹以此篇練習來回顧前段時間所學習到的一些知識,并且感謝各位碼友們的支援和批評指正!
1、 practice 1
題目要求:
0010 1000轉換為十進制
0000 2171轉換為十進制
0000 5AFB轉換為十進制
代碼如下:
a = 0b00101000
b = 0o00002171
c = 0x00005AFB
print(int(a), int(b), int(c))
起初寫語句的時候寫得是a = 00101000,忘記了寫數是幾進制了,寫了兩句才想起來,可見知識還是需要時時拿出來溫習!
運作結果如下:
40 1145 23291
2、practice 2
題目要求:
a,b=2,4
b=c=5 c-a>b-a的結果是?
a+=3 resault=a+b resault=?
代碼如下:
a, b = 2, 4
b = c = 5
d = c-a
e = b-a
print(d, e)
print(c-a > b-a) # 列印布爾類型的結果
a += 3
resault = a+b
print(resault)
d = c-a
e = b-a
print(d, e)
部落客加上這三句主要是想看到自己在剛寫出的代碼時,手動計算一下該段代碼的結果,走一下執行流程,進而與計算機執行結果進行比較,看是否在思考的過程中有偏差。
運作結果如下:
3 3
False
10
3、practice 3
題目要求:
使用if完成,輸入天氣溫度,如果高于30攝氏度,列印太熱了,否則列印還行
考察點:
- 鍵盤輸入input
- 強制類型轉換
- if-else結構
代碼如下:
fact_Tem = int(input("請輸入實際溫度:"))
if fact_Tem >= 30:
print("太熱了!")
else:
print('還行,沒那麼熱')
運作結果如下:
請輸入實際溫度:30
太熱了!
請輸入實際溫度:18
還行,沒那麼熱
4、practice 4
題目要求:
當p為True,q為False時,布爾表達式not(p and not q)的結果是?
代碼如下:
p = True
q = False
print(not(p and not q))
運作結果如下:
False
有一點需要注意,python當中的True和False的首字母必須大寫!
5、practice 5
題目要求:
使用while循環輸出1-50之間偶數的和
代碼如下:
方式一:
sum = 0
i = 2
while i <= 50 and i % 2 == 0:
sum += i
i += 2
print(sum)
這種方法固然是可以的,但是它并不适用于普遍情況,它隻是說從第一個滿足條件的偶數開始,然後每次加2即可持續滿足條件,最後輸出結果。
實際上此處還是想考察一下對***while裡面嵌套if判斷***的掌握。
方式二:
sum = 0
i = 1
while i <= 50:
if i % 2 == 0:
sum += i
i += 1
print(sum)
運作結果相同,如下:
650
6、補充知識
(1)用for語句也可以求解practice 5,代碼如下:
sum = 0
for i in range(1, 51):
if i % 2 ==0:
sum += i
print('sum=', sum)
print('完成for循環之後i的值是?', i)
運作結果如下:
sum= 650
完成for循環之後i的值是? 50
如果把sum放到for循環裡面,那麼還可以實作累加嗎?
for i in range(1, 51):
sum = 0
if i % 2 ==0:
sum += i
print('sum=', sum)
運作結果如下:
sum= 50
運作結果顯示:不會再實作累加了,每一輪條件判斷結束,sum都會歸零,就像秒表歸零一樣,sum最後的結果會是最後一次的i的值。
接着考慮,能否在for循環裡面再次聲明一個變量,比如聲明一個b變量,看看是否可以實作累加?(與上一段代碼類似)
sum = 0
for i in range(1, 51):
b = 0
b += i
print('b======>', b)
if i % 2 == 0:
sum += i
print('sum=', sum)
print('b======>', b)
運作結果如下:
b======> 1
b======> 2
b======> 3
b======> 4
b======> 5
b======> 6
b======> 7
b======> 8
b======> 9
b======> 10
b======> 11
b======> 12
b======> 13
b======> 14
b======> 15
b======> 16
b======> 17
b======> 18
b======> 19
b======> 20
b======> 21
b======> 22
b======> 23
b======> 24
b======> 25
b======> 26
b======> 27
b======> 28
b======> 29
b======> 30
b======> 31
b======> 32
b======> 33
b======> 34
b======> 35
b======> 36
b======> 37
b======> 38
b======> 39
b======> 40
b======> 41
b======> 42
b======> 43
b======> 44
b======> 45
b======> 46
b======> 47
b======> 48
b======> 49
b======> 50
sum= 650
b======> 50
運作結果顯示:在for循環當中的b的值每次都是0加上該次從range當中取到的值。for循環之外的b的值是最後一次的b的值,為50.
這道練習的目的想要說明兩個:
- 聲明變量的位置:聲明在for、while循環的外層,再執行sum+=i,就相當于累加。 如果放在for、while循環的内層,相當于每次循環都會再次執行這個操作,就像上面第二段代碼中sum=0,每次操作都會清零 。 假設即使上一步已經算出來sum=100了 再來一次計算都會清零
- python在for、while循環中沒有變量的作用域,在for、while循環的外層都可以擷取值, 變量聲明在循環裡面,循環外面都可以在最後取到它的值,隻不過聲明在内部和外部的作用不同 聲明在裡面是每次都置零 聲明在外面是做累加操作
(2)再補充一下break與continue跳轉語句
要求:如果是3的倍數則不進行累加
方式一:
sum = 0
for i in range(10):
if i % 3 != 0:
sum += i
print('sum----111=', sum)
運作結果:
sum----111= 27
方式二:
sum = 0
for i in range(10):
# 任務1
if i % 3 == 0:
pass # pass就是先占着位置,不讓它出現文法錯誤的
# 任務2
sum += i
print('sum----222=', sum) # 這裡相當于是0-9的累加 即使i % 3 == 0也pass了,對排除是三的倍數不起作用
運作結果:
sum----222= 45
我們觀察運作結果可以發現:方式一與方式二的運作結果不一樣,為什麼會出現這樣的結果嘞? 因為pass就是先占着位置,不讓它出現文法錯誤的,即使滿足條件做完任務一還是會進行任務二,就相當于是将1-9累加。
而且,我們手動計算一下,發現方式一的結果是正确的。那麼如何修正一下方式二的程式讓它運作結果變正确嘞?現在要怎麼在任務一的pass處填充内容呢?
(1)如果把pass關鍵字換成break會變成什麼樣子呢?
sum = 0
for i in range(10):
# 任務1
if i % 3 == 0:
break # 跳出整個for循環結構
# 任務2
sum += i
print('sum----333=', sum)
運作結果如下:
sum----333= 0
因為for i in range(10):取值範圍是0-9,0% 3 == 0,滿足條件,直接break退出,進而執行print(‘sum----333=’, sum)
(2)如果把pass關鍵字換成continue會變成什麼樣子呢?
sum = 0
for i in range(10):
# 任務1
if i % 3 == 0:
continue # 跳過下方的語句不執行,繼續執行下一次的循環
# 任務2
sum += i
print('sum----444=', sum)
運作結果如下:
sum----444= 27
continue是指:跳過下方的語句不執行,繼續執行下一次的循環 (結束本次循環下方的語句)
那麼誰是continue下方的語句嘞?它指的是循環體當中的下方的語句不執行,即:任務2 sum += i不執行,直接進行下一次的循環。執行結果無誤!