例16:
題目:輸出指定格式的日期
方法1:git
import datetime if __name__ == '__main__': # 輸出今日日期,格式爲 dd/mm/yyyy。更多選項能夠查看 strftime() 方法 print(datetime.date.today().strftime('%d/%m/%Y')) # 建立日期對象 miyazakiBirthDate = datetime.date(1941, 1, 5) print(miyazakiBirthDate.strftime('%Y/%d/%m')) # 日期算術運算 miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1) print(miyazakiBirthNextDay.strftime('%d/%m/%Y')) # 日期替換 miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1) print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
運行結果:
22/12/2017
1941/05/01
06/01/1941
05/01/1942正則表達式
方法2:編程
import time print (time.time()) #Python time time() 返回當前時間的時間戳(1970紀元後通過的浮點秒數)。 print (time.localtime()) #做用是格式化時間戳爲本地的時間。 若是sec參數未輸入,則以當前時間爲轉換標準。 DST (Daylight Savings Time) flag (-1, 0 or 1) 是不是夏令時。 print (time.asctime()) #函數接受時間元組並返回一個可讀的形式爲"Tue Dec 11 18:07:14 2008"(2008年12月11日 週二18時07分14秒)的24個字符的字符串。 print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) )#'2017-06-27 13:00:57' 運行結果: 1513952857.059225 time.struct_time(tm_year=2017, tm_mon=12, tm_mday=22, tm_hour=22, tm_min=27, tm_sec=37, tm_wday=4, tm_yday=356, tm_isdst=0) Fri Dec 22 22:27:37 2017 2017-12-22 22:27:37
例17
題目:輸入一行字符,分別統計其中的字母,數字,空格和其餘字符的個數。
方法1:數組
input=input("輸入任意字符: ") letters=[] spaces=[] number=[] others=[] for i in iter(input): if i.isalpha() == True: ###isalpha 檢測字符串是否只由字母組成。 letters.append(i) elif i.isspace()==True: ###檢測字符串是否只由空白字符組成 spaces.append(i) elif i.isdigit()==True: ###檢查字符串是否有整數組成 number.append(i) else: others.append(i) print(""" 字母{},個數:{} 空格{},個數:{} 數字{},個數:{} 其它{},個數:{} """ .format(letters,len(letters),spaces,len(spaces),number,len(number),others,len(others)))
運行結果:
輸入任意字符: 999@@@qqq iii)))app
字母['q', 'q', 'q', 'i', 'i', 'i'],個數:6
空格[' ', ' ', ' '],個數:3
數字['9', '9', '9'],個數:3
其它['@', '@', '@', ')', ')', ')'],個數:6ide
方法2:用正則表達函數
import re ###正則表達式功能 def statistics(): Input=input("輸入任意字符:") letters=0 numbers=0 spaces=0 others=0 for i in range(len(Input)): if re.match('\d',Input[i]): #re.match 嘗試從字符串的起始位置匹配一個模式,若是不是起始位置匹配成功的話,match()就返回none。 letters +=1 elif re.match("[a-zA-Z]",Input[i]): numbers +=1 elif re.match("\s",Input[i]): spaces +=1 else: others +=1 print(""" 字母個數:{} 數字個數:{} 空格個數:{} 其它個數:{} """.format(letters,numbers,spaces,others)) statistics()
運行結果:
輸入任意字符:qazwsx123#$%^&*() spa
字母個數:6 數字個數:3 空格個數:2 其它個數:8
例18
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
程序分析:關鍵計算出每一項的值
方法1:code
T=0 S=[] n=int(input("n= ")) m=int(input("m= ")) for i in range(n): T = T+m ##5,55,555,5555,55555 m = m * 10 ##50,500,5000,50000 S.append(T) print(T) print(S,sum(S))
運行結果:
n= 5
m= 5
5
55
555
5555
55555
[5, 55, 555, 5555, 55555] 61725orm
方法2:
def suman(a, n): if n<1: return [] s = [a] ##s=4 m = 10 for i in range(0, n-1): s.append(s[i]*m + a) ###當i=0,s[i]=4 .4*10+4 [4,44],當i=1時,s[i]=44 ,44*10+4 [4,44,444] return sum(s), s print(suman(4,5))
運行結果:
(49380, [4, 44, 444, 4444, 44444])
例19
題目:一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。
分析:能夠參考例14
方法:
for i in range(1,1001): summ =0 for j in range(1,i): if i%j==0: summ +=j if summ ==i : print(i)
運行結果:
6
28
496
例20:
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共通過多少米?第10次反彈多高?
程序分析:下落後反彈爲x,下落反彈長度累加等於3x
方法1:
def summ(x,y,n): L=[] for i in range(1,n+1): #從1開始到11,下落十次 x *=y ###下落反彈後,彈起來的高度是下落高度的一半 total=x*3 ###100下落反彈高度是50,x第一次記錄五十加上下落高度等於150。因此這裏total=x值*3=150 L.append(total) print(x) print(sum(L)-x)###sum計算列表值。減去最後一次反彈高度。即爲第十次落地時總里程。 print(L) summ(100,0.5,10)
運行結果:
0.09765625
299.609375
[150.0, 75.0, 37.5, 18.75, 9.375, 4.6875, 2.34375, 1.171875, 0.5859375, 0.29296875]
方法2:第一次高度先記錄,反彈在降落的里程等於2x
x=int(input("輸入高度:")) y=int(input("輸入反彈次數: ")) total=[] l=[] for i in range(1,y+1): #次反彈數 if i ==1: #第一次下落,反彈高度 x*=0.5 記錄到l列表 total.append(x) else: total.append(x*2) ##反彈在次下落高度是相等的,這裏乘以2 x *=0.5 l.append(x) print(total) print(l) print("里程累計\033[31;1m{}\033[0mM".format(sum(total))) print("第\033[31;1m%s\033[0m反彈高度%s"%(y,l[-1]))
運行結果:
輸入高度:100
輸入反彈次數: 10
[100, 100.0, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625]
[50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625, 0.1953125, 0.09765625]
里程累計299.609375M
第10反彈高度0.09765625