-與數學中整數的概念一致
-可正可負,沒有取值範圍限制
4種進位表示形式
□十進位:1010,99,-217
□二進位:以0b或0B開頭:0b010,-0B101
□八進位:以0或00開頭:0o123,-0O456
□十六進位:以0x或0X開頭:0x9a,-0X89
浮點類型,與數學中實數的概念一致
浮點數類型
浮點數間運算存在不確定尾數,不是bug
>>>0.1+0.3
0.4
>>>0.1+0.2
0.30000000004
浮點數間運算存在不確定尾數
>>>0.1+0.2==0.3
False
>>> round(0.1+0.2,1)==0.3
True
與數學中複數的概念一致
操作符是完成運算的一種符號體系
二元操作符有對應的增強賦值操作符
類型間可進行混合運算,生成結果為"最寬「」類型
-三種類型存在一種逐漸"擴展或變寬"的關係:整數->浮點數->複數
一些以函數形式提供的數值運算功能
基本問題:持續的價值
一年365天,每天進步1‰,累計進步多少呢?
一年365天,每天退步1‰,累計剩下多少呢?
- 數學公式可以求解,似乎沒必要用程序
- 但如果是三天打魚兩天曬網呢?
- 如果是雙休日又不退步呢?
問題1:1‰的力量
#DayDayUpQ1.py
dayup=pow(1.001,365)
daydown =pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}『』. format(dayup, daydown))
問題2:5‰和1%的力量
●一年365天,每天進步5‰或1%,累計進步多少呢?
●一年365天,每天退步5‰或1%,累計剩下多少呢?
#DayDayUpQ2. py
dayfactor =0.005
dayup=pow(1+dayfactor,365)
daydown= pow(1-dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}」. format(dayup, daydown))
>>>1% 運行結果
問題3:工作日的力量
-一年365天,一周5個工作日,每天進步1%
-—年365天,一周2個休息日,每天退步1%
-這種工作日的力量,如何呢?
#DayDayUpQ3. py
dayup =1.0
dayfactor =0.01
for i in range(365):
if i %7 in [6,0]:
dayup= dayup*(1-dayfactor)
else:
dayup= dayup*(1+dayfactor)
print("工作日的力量:{:.2f}". format(dayup))
問題4:工作日的努力
-工作日模式要努力到什麼水平,才能與每天努力1%一樣?
-A君:一年365天,每天進步1%,不停歇
-B君:一年365天,,每周工作5天休息2天,休息日下降1%,要多努力呢?
def..while.. ("笨辦法」試錯)
#DayDayUpQ4.py
def dayUP(df):
dayup=1
for i in range(365):
if i % 7 in [6,0]:
dayup=dayup*(1-0.01)
else:
dayup=dayup*(1+df)
return dayup
dayfactor=0.01
while dayUP(dayfactor) < 37.78:
dayfactor+=0.001
print("工作日的努力參數是: {:.3f}". format(dayfactor))
>>>(運行結果)
工作日的努力參數是:0.019
工作日模式,每天要努力到1.9%,
相當於365模式每天1%的一倍!
-GRIT,堅毅,對長期目標的持續激情及持久耐力
-GRIT是獲得成功最重要的因素之一,牢記天天向上的力量
由0個或多個字符組成的有序字符序列
-字符串由一對單引號或一對雙引號表示
-「請輸入帶有符號的溫度值:」或者『C』
-字符串是字符的有序序列,可以對其中的字符進行索引
「請」是「請輸入帶有符號的溫度值:"的第0個字符
字符串有2類共4種表示方法
-由一對單引號或雙引號表示,僅表示單行字符串
「請輸入帶有符號的溫度值:」或者 『C』
-由一對三單引號或三雙引號表示,可表示多行字符串
「『Python
語言』」
字符串有2類共4種表示方法
-如果希望在字符串中包含雙引號或單引號呢?
『』這裡有個雙引號(「)』或者「這裡有個單引號(』)」
-如果希望在字符串中既包括單引號又包括雙引號呢?
「『這裡既有單引號(』)又有雙引號(」)』」
字符串的序號
使用【】獲取字符串中一個或多個字符
-索引:返回字符串中單個字符 <字符串>[M]
「請輸入帶有符號的溫度值:」[0] 或者 TempStr[-1]
-切片:返回字符串中一段字符子串 <字符串>[M:N]
「請輸入帶有符號的溫度值:[1:3]或者TempStr[0:-1]
字符串切片高級用法
使用[ M:N:K ] 根據步長對字符串切片
-<字符串>[M:N],M缺失表示至開頭,,N缺失表示至結尾
"O一二三四五六七八九十"[:3]結果是"O一二"
-<字符串>[M:N:K],根據步長K對字符串切片
"O一二三四五六七八九十"[1:8:2]結果是"一三五七"
"O一二三四五六七八九十"[::-1]結果是"十九八七六五四三二一O"
轉義符\
-轉義符表達特定字符的本意
"這裡有個雙引號(\")"結果為這裡有個雙引號(")
-轉義符形成一些組合,表達一些不可列印的含義
"\b"回退"\n"換行(光標移動到下行首)"\r"回車(光標移動到本行首)
字符串操作符
由0個或多個字符組成的有序字符序列
代碼一
代碼二
eval 去引號
↑把世界上所有字符都放入其中。
輸出:
「方法」在編程中是一個專有名詞
-「方法」特指<a>.<b>( )風格中的函數<b>( )
-方法本身也是函數,但與<a>有關,<a>.<b>( )風格使用
-字符串及變量也是<a>,存在一些方法
一些以方法形式提供的字符串處理功能
時間格式化
>>>t=time.gmtime()
>>>time. strftime("%Y-%m-%d %H: %M: %S",t)
'2018-01-2612:55:20'
程序計時應用廣泛
-程序計時指測量起止動作所經歷時間的過程
-測量時間:perf_counter( )
需求分析
文本進度條
-採用字符串方式列印可以動態變化的文本進度條
-進度條需要能在一行中逐漸變化
如何獲得文本進度條的變化時間?
-採用sleep ( )模擬一個持續的進度
-似乎不那麼難
#TextProBarV1. py
import time
scale 10
print("執行開始")
for i in range(scale+1):
a ='*'*i
b ='. '*(scale -i)
c =(i/scale)*100
print("{: ^3.0f)%[{}->{}]". format(c, a, b))
time. sleep(0.1)
print("-執行結束-")
單行動態刷新
-刷新的本質是:用後列印的字符覆蓋之前的字符
-不能換行:print()需要被控制
-要能回退:列印後光標退回到之前的位置\r
import time
scale= 50
print("執行開始". center(scale//2,"-"))
start=time.perf_counter()
for i in range(scale+1):
a='*'*1
b='.'*(scale-i)
c=(i/scale)*100
dur=time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur), end='')
time.sleep(0.1)
print("\n"+"執行結束".center(scale//2,'-'))
舉一反三
進度條擴展
-在任何運行時間需要較長的程序中增加進度條
-在任何希望提高用戶體驗的應用中增加進度條
-進度條是人機互動的紐帶之一
文本進度條的不同設計函數
三次方格式化
■獲得用戶輸入的一個數字,可能是整數或浮點數,a,計算a的三次方值,並列印輸出。
■輸出結果採用寬度20個字符、居中輸出、多餘字符採用減號(-)填充。
■如果結果超過20個字符,則以結果寬度為準。
a=int(input())
print(str(pow(a,3)).center(20,"-"))
星號三角形
讀入一個整數N,N是奇數,輸出由星號字符組成的等邊三角形,要求:
第1行1個星號,第2行3個星號,第3行5個星號,依次類推,最後一行共N的星號。
n = eval(input())
for i in range(1, n + 1, 2):
print("{0:^{1}}".format('*' * i, n))
愷撒密碼
愷撒密碼是古羅馬愷撒大帝用來對軍事情報進行加解密的算法,它採用了替換方法對信息中的每一個英文字符循環替換為字母表序列中該字符後面的第三個字符,即,字母表的對應關係如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
對於原文字符P,其密文字符C滿足如下條件:C=(P+3) mod 26
上述是凱撒密碼的加密方法,解密方法反之,即:P=(C-3) mod 26
假設用戶可能使用的輸入包含大小寫字母a~zA~Z、空格和特殊符號,請編寫一個程序,對輸入字符串進行愷撒密碼加密,直接輸出結果,其中空格不用進行加密處理。使用input()獲得輸入。
str = input()
t = ''
for i in str:
if ord('a') <= ord(i) <= ord('z'):
t += chr(ord('a')+(ord(i)-ord('a')+3)%26)
elif ord('A') <= ord(i) <= ord('Z'):
t += chr(ord('A')+(ord(i)-ord('A')+3)%26)
else:
t += i
print(t)
chr() 返回值是當前整數對應的 ASCII 字符。
ord() 函數返回值是對應的十進位整數。
中國大學MOOC課程,
Python程序設計,第3周練習答案