#python3下進行實驗
#第一例:
題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。

1 for a in range(1,5): 2 for b in range(1,5): 3 for c in range(1,5): 4 if (a != b) and (a != c) and (b != c): 5 print(a,b,c)

1 num=[1,2,3,4] 2 i=0 3 for a in num: 4 for b in num: 5 for c in num: 6 if (a!=b) and (b!=c) and (c!=a): 7 i+=1 8 print(a,b,c) 9 print('總數是:',i)
#第二例:
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。

1 i = int(input('凈利潤:')) 2 arr = [1000000,600000,400000,200000,100000,0] 3 rat = [0.01,0.015,0.03,0.05,0.075,0.1] 4 r = 0 5 for idx in range(0,6): 6 if i>arr[idx]: 7 r+=(i-arr[idx])*rat[idx] 8 print((i-arr[idx])*rat[idx]) 9 i=arr[idx] 10 11 print('應發獎金總數:',r)

1 Bonus = 0; 2 BonusRateList = [[100,0.010],[60,0.015],[40,0.030],[20,0.050],[10,0.075],[0,0.100]]; 3 4 Profit = int(input('凈利潤:')); 5 Profit /= 10000; 6 7 for i in range(0, len(BonusRateList)) : 8 if (Profit > BonusRateList[i][0]) : 9 Bonus += ((Profit - BonusRateList[i][0]) * BonusRateList[i][1]); 10 Profit = BonusRateList[i][0]; 11 12 print (Bonus * 10000);
#第三例:
題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程序分析:假設該數為 x。1、則:x + 100 = n2, x + 100 + 168 = m22、計算等式:m2 - n2 = (m + n)(m - n) = 1683、設置: m + n = i,m - n = j,i * j =168,i 和 j 至少一個是偶數4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶數,要么都是奇數。5、從 3 和 4 推導可知道,i 與 j 均是大於等於 2 的偶數。6、由於 i * j = 168, j>=2,則 1 < i < 168 / 2 + 1。7、接下來將 i 的所有數字循環計算即可

1 for i in range(1,85): 2 if 168 % i == 0: 3 j = 168 / i; 4 if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 : 5 m = (i + j) / 2 6 n = (i - j) / 2 7 x = n * n - 100 8 print(x)

1 for m in range(168): 2 for n in range(m): 3 if (m+n)*(m-n)==168: 4 x=n**2-100 5 print("符合條件的整數有:",x)

1 #思路:根據題意可先求出所求數的最大范圍,並在范圍內部循環測試是否有滿足條件的數字,若有,則打印出來: 2 3 4 i = 1 5 #求出最大范圍 6 while ((i+1)*(i+1)-i*i) <= 168: 7 i += 1 8 #循環測試並打印 9 for j in range(1,i): 10 for k in range(1,i): 11 if (k*k - j*j) == 168: 12 print(k*k-268)
#第四例:
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於2時需考慮多加一天:

1 year = int(input('year:\n')) 2 month = int(input('month:\n')) 3 day = int(input('day:\n')) 4 5 months = (0,31,59,90,120,151,181,212,243,273,304,334) 6 if 0 < month <= 12: 7 sum = months[month - 1] 8 else: 9 print('data error') 10 sum += day 11 leap = 0 12 if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): 13 leap = 1 14 if (leap == 1) and (month > 2): 15 sum += 1 16 print('it is the %dth day.' % sum)

1 #參考解法: 2 3 #!/usr/bin/python 4 # -*- coding: UTF-8 -*- 5 6 #year=int(input("年:\n")) 7 #month=int(input("月:\n")) 8 #day=int(input("日:\n")) 9 #months1=[0,31,60,91,121,152,182,213,244,274,305,335,366] #閏年 10 #months2=[0,31,59,90,120,151,181,212,243,273,304,334,365] #平年 11 12 #if ((year%4==0)and(year%100!=0)) or((year%100==0)and(year%400==0)): 13 # Dth=months1[month-1]+day 14 #else: 15 # Dth=months2[month-1]+day 16 #print("是該年的第%d天"% Dth) 17 18 19 print('------------------------------------------------------------') 20 21 22 #閏年需要同時滿足以下條件: 23 24 # 1、年份能被4整除; 25 # 2、年份若是 100 的整數倍的話需被400整除,否則是平年。 26 27 # 輸入任意年月日,知道是改年第幾天 28 29 #p = [31,28,31,30,31,30,31,31,30,31,30,31] # 平年 30 #w = [31,29,31,30,31,30,31,31,30,31,30,31] # 閏年 31 32 #year =int(input("請輸入年:"+'\n')) 33 #month =int(input("請輸入月:"+'\n')) 34 #day=int(input("請輸入日:"+'\n')) 35 36 #arr=[31,28,31,30,31,30,31,31,30,31,30,31] 37 #sum=day 38 #for i in range(0,month-1): 39 # sum+=arr[i] 40 #if year%4==0: 41 # if year%100==0 and year%400!=0: 42 # print("這是今年的第%d天" % sum) 43 # else: 44 # sum=sum+1 45 # print("這是今年的第%d天" % sum) 46 #else: 47 # print("這是今年的第%d天" % sum) 48 49 print('---------------------------------------------------------------------') 50 51 #參考解法: 52 53 # 輸入任意年月日,知道是改年第幾天 54 55 #p = [31,28,31,30,31,30,31,31,30,31,30,31] # 平年 56 #w = [31,29,31,30,31,30,31,31,30,31,30,31] # 閏年 57 58 #year =int(input("年:\n")) 59 #month =int(input("月:\n")) 60 #day =int(input("日:\n")) 61 62 # 判斷閏年,平年 63 64 #if year % 100 == 0: 65 # if year % 400 == 0: 66 # d=w 67 # else: 68 # d=p 69 #else: 70 # if year % 4 == 0: 71 # d=w 72 # else: 73 # d=p 74 75 # 計算天數 76 77 #days = sum(d[0:month-1])+day 78 #print("%d.%d.%d是%d年的第%s天。"%(year,month,day,year,days)) 79 80 print('--------------------------------------------------------------') 81 82 83 ### 這個方法好 ### 84 #參考解法: 85 86 #year = int(input('請輸入年份:')) 87 #month = int(input('請輸入月份:')) 88 #day = int(input('請輸入日期:')) 89 #total = 0 90 #if year%4 == 0: 91 # days = 29 92 #else: 93 # days = 28 94 #if year%4 == 0: 95 # print(year, '年是潤年,2月有', days, '天!') 96 #else: 97 # print(year, '年是平年,2月有', days, '天!') 98 #if month <= 1: 99 # total = day 100 #elif month == 2: 101 # total = 31 + day 102 #else: 103 # total = (month - 2) * 30 + days + month/2 + day 104 #print(year, '年',month, '月', day, '日,是這一年的第', total, '天!') 105 106 107 print('------------------------------------------------------------------') 108 109 110 #參考解法: 111 112 def isLeapYear(a): 113 if (0 == a%4 or 0 == a%400) and 0 != a%100 : 114 return 1 115 else: 116 return 0 117 dict = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} 118 a = int(input("Input year:")) 119 b = int(input("Input month:")) 120 c = int(input("Input day:")) 121 m = 0 122 k = isLeapYear(a) 123 for i in range(1,b): 124 m = m + dict[i] 125 m = m + isLeapYear(a) + c 126 127 print(m) 128 129 print('----------------------------------------------------------------------') 130 131 132 #參考方法: 133 134 year = int(raw_input('year:\n')) 135 month = int(raw_input('month:\n')) 136 day = int(raw_input('day:\n')) 137 days = [31,28,31,30,31,30,31,31,30,31,30,31] 138 if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0): 139 days[2] += 1 140 141 now = sum(days[0:month-1])+day 142 print('it is the %dth day.' % now) 143 144 145 146 147 148 149 150 print('----------------------------------------------------------------------') 151 152 #參考方案: 153 154 import time 155 import sys 156 157 reload(sys) 158 sys.setdefaultencoding('utf-8') # 設置 'utf-8' 159 a = raw_input("輸入時間(格式如:2017-04-04):") 160 t = time.strptime(a,"%Y-%m-%d") 161 print(time.strftime("今年的第%j天",t).decode('utf-8')) 162 163 print('----------------------------------------------------------------------') 164 165 166 #參考方法: 167 168 import time 169 170 D=raw_input("請輸入年份,格式如XXXX-XX-XX:") 171 d=time.strptime( D,'%Y-%m-%d').tm_yday 172 print("the {} day of this year!" .format(d)) 173 174 print('----------------------------------------------------------------------') 175 176 177 #Python3 參考解法: 178 179 #!/usr/bin/python3 180 181 date = input("輸入年月日(yyyy-mm-dd):") 182 y,m,d = (int(i) for i in date.split('-')) 183 sum=0 184 special = (1,3,5,7,8,10) 185 for i in range(1,int(m)): 186 if i == 2: 187 if y%400==0 or (y%100!=0 and y%4==0): 188 sum+=29 189 else: 190 sum+=28 191 elif(i in special): 192 sum+=31 193 else: 194 sum+=30 195 sum+=d 196 print("這一天是一年中的第%d天"%sum) 197 198 199 print('----------------------------------------------------------------------') 200 201 #真正意義上自己思考寫出來的第一題,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。 202 203 #!/usr/bin/python 204 # -*- coding: UTF-8 -*- 205 206 i= int(input('請輸入年份:')) 207 j= int(input('請輸入月份:')) 208 k= int(input('請輸入天數:')) 209 month = [31,28,31,30,31,30,31,31,30,31,30,31] 210 day = 0 211 if i%4 == 0 or i %400 == 0 and i%100 != 0: #閏年 212 month = month[:j-1] 213 if j >2: #大於2月份 214 day = sum(month)+1+k 215 216 elif j== 2 and k ==29: #剛好在閏年閏天 217 day = sum(month)+1+k 218 219 else: 220 day = sum(month)+k 221 else: #平年 222 month = month[:j-1] 223 day = sum(month)+k 224 225 print('這一天是這一年的第{}天'.format(day)) 226 227 print('----------------------------------------------------------------------') 228 229 參考方法: 230 231 #!/usr/bin/env python 232 #-*- coding:utf-8 -*- 233 234 import calendar 235 year = int(input("year: ")) 236 month = int(input("month: ")) 237 day = int(input("day: ")) 238 days = 0 239 if 0 < month <= 12: 240 _, month_day = calendar.monthrange(year, month) 241 if day <= month_day: 242 for m in range(1, month): 243 _, month_day = calendar.monthrange(year, m) 244 days += month_day 245 days += day 246 print days 247 else: 248 print("input day error") 249 else: 250 print("input month error") 251 252 print('----------------------------------------------------------------------') 253 254 #通過計算輸入的日期與相應年份1月1日相差的秒數,然后除以每天的秒數3600*24,即可得到輸入日期的天數 255 256 #!/usr/bin/env python3 257 258 import time 259 260 def datecount(date): 261 date0=date[0:4]+"-01-01" 262 datet=time.strptime(date,"%Y-%m-%d") #將輸入的字符串轉化為時間元組 263 date0t=time.strptime(date0,"%Y-%m-%d") 264 dates=time.mktime(datet) #將時間元組轉化為時間戳 265 date0s=time.mktime(date0t) 266 count=(dates-date0s)/(3600*24) #輸入日期的時間戳減當前年份0101的時間戳除以每天秒數 267 return count+1 268 269 a=input("請輸入日期:格式如2017-06-16\n") 270 print("{}是{}年第{}天".format(a,a[0:4],int(datecount(a)))) 271 272 print('----------------------------------------------------------------------') 273 274 #考慮實際的情況,比如輸入月份為13月或輸入天數為65天時候報錯(日期僅校對0-31天,未按照實際日期校對): 275 276 #!/usr/bin/env python 277 #-*- coding:utf-8 -*- 278 279 print('輸入年月日以查看某一日期是當年第幾天\n') 280 year = int(input('請輸入年份:\n')) 281 month = int(input('請輸入月份:\n')) 282 day = int(input('請輸入日期:\n')) 283 months = [31,28,31,30,31,30,31,31,30,31,30,31] 284 d = 0 285 286 if 0<month<=12: 287 if 0<day<=31: 288 d = d + day 289 if month > 2: 290 if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): 291 d = d + 1 292 for i in range(12): 293 if (i+1) < month: 294 d = d + months[i] 295 i = i + 1 296 print(d) 297 else: 298 print('輸入的日期有錯誤') 299 else: 300 print('輸入的月份有錯誤') 301 302 303 print('----------------------------------------------------------------------') 304 305 #通過輸入時間點的unix時間戳和輸入年份首日的Unix時間戳之間的差,來計算經過的時間 306 307 #coding=utf-8 308 import time 309 print "Please Enter full number just like 02 01 03" 310 y = int(raw_input('Enter the year:')) #分別輸入年月日 311 m = int(raw_input('Enter the month:')) 312 d = int(raw_input('Enter the day:')) 313 a = (y,m,d,00,00,00,00,00,00) #要求長度為9 314 b = (y,01,01,00,00,00,00,00,00) #輸入年份的第一天 315 timestampa = time.mktime(a) #兩個都轉換為Unix時間戳,即1970.1.1到現在經過的秒數 316 timestampb = time.mktime(b) 317 timec = int((timestampa - timestampb)/(3600*24)) #輸入的時間戳減去年份首天的時間戳等於經過的秒數,再換算成天,取整 318 print("There are {} days goes by!".format(timec)) 319 320 print('----------------------------------------------------------------------')
#第五例:
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。

1 l = [] 2 for i in range(3): 3 x = int(input('integer:\n')) 4 l.append(x) 5 l.sort() 6 print(l)

1 #其他參考解法: 2 3 #!/usr/bin/python 4 # -*- coding: UTF-8 -*- 5 6 x = int(input("x:")) 7 y = int(input("y:")) 8 z = int(input("z:")) 9 a = {"x":x,"y":y,"z":z} #字典 10 print('--------分割線--------') 11 for w in sorted(a, key=a.get): #a.get是字典的用法,字典有key鍵,vlaue值 12 print(w, a[w]) 13 14 print('======================================================') 15 #參考解法: 16 17 18 a=[1,3,5,2,4,5,7] 19 20 n=len(a) 21 22 for i in range(0,n): 23 for j in range(i,n) : 24 if (a[i] >= a[j] ): 25 tmp =a[i] 26 a[i]=a[j] 27 a[j]=tmp 28 29 print(a) 30 print('======================================================') 31 #參考解法: 32 33 34 x= input("int1:") 35 y= input("int2:") 36 Max = max(x,y) 37 Min = min(x,y) 38 z= input("int3:") 39 if z > Max : 40 print(Min,Max,z) 41 elif z < Min : 42 print(z,Min,Max) 43 else : 44 print(Min,z,Max) 45 print('======================================================') 46 #Python3.x 版本下使用利用冒泡排序方法: 47 48 #!/usr/bin/env python3 49 50 # 利用冒泡排序方法 51 def Sort(list): 52 n = len(list) 53 for i in range(1, n): 54 # 一次次的將最大的學出來 55 for j in range(1, n - i + 1): 56 if list[j - 1] > list[j]: 57 list[j - 1], list[j] = list[j], list[j - 1] 58 # 打印排序過程 59 print(list) 60 for i in range(0, n): 61 print(list[i]) 62 63 # 讀入數據 64 def inputData(): 65 list_first = [] 66 while True: 67 a = input("please input num:".strip()) 68 if len(a) == 0: 69 return list_first 70 else: 71 list_first.append(int(a)) 72 73 if __name__ == '__main__': 74 lt = inputData() 75 print(lt) 76 Sort(lt) 77 print('======================================================') 78 79 #使用 列表 sort=,可接受參數 reverse,默認為布爾值 false,按升序排序,設置為 true 則按降序排序 80 81 #!/usr/bin/python 82 # -*- coding: UTF-8 -*- 83 84 x = int(input('x=')) 85 y = int(input('y=')) 86 z = int(input('z=')) 87 num = [x, y, z] 88 num.sort() # 對列表進行升序排序 89 print('這三個數由小到大的順序為:',num) 90 rnum = [x, y, z] # 對列表進行降序排序 91 rnum.sort(reverse=True) 92 print('這三個數由大到小的順序為:',rnum) 93 94 print('======================================================') 95 #參考方法: 96 97 #!/usr/bin/env python 98 #coding:utf-8 99 100 D=input("請輸入三個數字,格式如 'a,b,c':") 101 li=D.split(",") 102 li2=[int(i) for i in li] 103 li2.sort() 104 print(li2) 105 106 print('======================================================') 107 108 #對輸入類型進行了控制,如果輸入錯誤,就提示用戶,讓用戶再次輸入,直到正確輸入整數為止。 109 110 #!/usr/bin/env python 111 #coding:utf-8 112 #輸入三個整數x,y,z,請把這三個數由小到大輸出。 113 while 1: 114 try: 115 x = int(input("plz input x: ")) 116 y = int(input("plz input y: ")) 117 z = int(input("plz input z: ")) 118 list1 = [x, y, z] 119 print(sorted(list1)) 120 break 121 except: 122 print("請輸入整數") 123 print('======================================================') 124 #參考方法: 125 126 #! /usr/bin/python 127 # -*- coding:UTF-8 -*- 128 a = int(input("請輸入:")) 129 b = int(input("請輸入:")) 130 c = int(input("請輸入:")) 131 if a>b and a>c: 132 x = a 133 a = c 134 elif b>a and b>c: 135 x = b 136 b = c 137 else: 138 x = c 139 if a>b: 140 print(b,a,x) 141 else: 142 print(a,b,x) 143 144 print('======================================================') 145 146 #參考方法: 147 148 #!/usr/bin/python 149 # -*- coding: UTF-8 -*- 150 151 x = int(input('x->')) 152 y = int(input('y->')) 153 z = int(input('z->')) 154 arr = [x,y,z] 155 for i in range (0,3): 156 for o in range (0,3): 157 for p in range (0,3): 158 if arr[i] > arr[o] > arr[p]: 159 print(arr[i],arr[o],arr[p]) 160 161 162 print('======================================================') 163 164 165 #參考方法: 166 167 # -*- coding: utf-8 -*- 168 169 import numpy as np 170 x=int(input('請輸入一個整數:\n')) 171 y=int(input('請輸入一個整數:\n')) 172 z=int(input('請輸入一個整數:\n')) 173 l = [x,y,z] 174 for i in range(len(l)): 175 a = np.argmin(l) 176 print(l[a]) 177 del l[a]
#第六例:
題目:斐波那契數列。
程序分析:斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……。
在數學上,費波那契數列是以遞歸的方法來定義:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ F[n-2](n=>2)

1 ''' 2 #使用數學的通項公式: 3 4 # 輸出第n個數 5 6 n = int(input("第幾個數: ")) 7 8 # 斐波那契數列的通項公式 9 f =(1/(5**0.5))*(((1+(5**0.5))/2)**n - ((1-(5**0.5))/2)**n) 10 print("第%d個數:"%n,int(f)) 11 12 # 輸出前n個數列: 13 l=[1] 14 for i in range(1,n+1): 15 f=(1/(5**0.5))*(((1+(5**0.5))/2)**i - ((1-(5**0.5))/2)**i) 16 l.append(int(f)) 17 18 19 print("==================") 20 #斐波拉契數列---使用生成器 21 def fib(max): 22 n,a,b = 0,0,1 23 while n < max: 24 yield b 25 a,b = b,a+b 26 n += 1 27 max = int(input('input max num :')) 28 for n in fib(max): 29 print(n) 30 31 print("==============================") 32 ''' 33 list = [] 34 a = 1 35 list.append(a) # 第一個 36 b = 1 37 list.append(b) # 第二個 38 for i in range(1,20): # 再輸出接下來的 19 個 39 c = list[i-1]+list[i] 40 list.append(c) 41 print(list) # 輸出 21 個 42 43 44 print("==================") 45 #這種函數應該使用修飾器加上緩存 46 47 #!/usr/bin/python3 48 49 from functools import lru_cache 50 51 @lru_cache(None) 52 def f(n): 53 assert n >= 0 54 return n if n <= 1 else f(n - 1) + f(n - 2) 55 56 57 print(f(10)) 58 59 print("====") 60 #Python3 下參考方法: 61 62 #!/usr/bin/env python3 63 # -*- coding:utf-8 -*- 64 65 class Fibs: 66 def __init__(self, n = 10): 67 self.a = 0 68 self.b = 1 69 self.n = n 70 self.i = 0 71 def __iter__(self): 72 return self 73 def __next__(self): 74 self.a, self.b = self.b, self.a+self.b 75 self.i += 1 76 if self.i > self.n: 77 raise StopIteration 78 return self.a 79 fibs=Fibs(10) 80 for i in fibs: 81 print (i) 82 83 84 print("==================") 85 fe_list = [0, 1] 86 for i in range(1,11): 87 fe_list.append(sum(fe_list[(i-1):(i+1)])) 88 89 print(fe_list)

1 #方法一: 2 ''' 3 def fib(n): 4 a,b = 1,1 5 print(a,b) 6 for i in range(n-1): 7 a,b = b,a+b 8 print(a,b) 9 return a 10 11 # 輸出了第10個斐波那契數列 12 print(fib(10)) 13 ''' 14 print("=========================") 15 for i in range(3): 16 print(i) 17 18 print("=============") 19 20 # 使用遞歸 21 #PS:遞歸有很多重復計算,比方說你計算f(5)時要去計算f(4)和f(3), 22 #而計算f(4)時又要去計算f(3),這樣f(3)就重復計算了 23 24 def fib(n): 25 if n==1 or n==2: 26 return 1 27 return fib(n-1)+fib(n-2) 28 29 # 輸出了第10個斐波那契數列 30 print(fib(10)) #如果這里數字改成0那么他會無限遞歸 31 32 #解析 33 #次數 return的值 34 #fib(1) 1 35 #fib(2) 1 36 #fib(3) 2+1=1+1=2 #fib(2)+fib(1)=1+1=2 37 #4 3+2=2+1=3 38 #5 4+3=3+2=5 39 40 #結果:1,1,2,3,5 41 ''' 42 for a in range(fib(10)): 43 print(a) 44 45 print(fib(1)) 46 print(fib(2)) 47 print(fib(3)) 48 print(fib(4)) 49 print(fib(5)) 50 print(fib(6)) 51 print(fib(7)) 52 print(fib(8)) 53 print(fib(9)) 54 print(fib(10)) 55 ''' 56 57 print("============================") 58 59 #方法三 60 #迭代 61 def fib(n): 62 if n == 1: 63 return [1] 64 if n == 2: 65 return [1, 1] 66 fibs = [1, 1] 67 for i in range(2, n): 68 print(i) 69 fibs.append(fibs[-1] + fibs[-2]) #-1,-2分別意味着列表里的倒數第一個,倒數第二個數 70 print(fibs) 71 return fibs 72 73 # 輸出前 10 個斐波那契數列 74 print("哎嘿") 75 print(fib(10)) 76 77 #解析: 78 #上面的結果為:(根據fibs.append(fibs[-1] + fibs[-2])得出) 79 #2 80 #[1, 1, 2] #1+2=3迭代給下面 81 #3 82 #[1, 1, 2, 3] #2+3=5迭代給下面 83 #4 84 #[1, 1, 2, 3, 5]#... 85 #5 86 #[1, 1, 2, 3, 5, 8]#..... 87 #6 88 #[1, 1, 2, 3, 5, 8, 13] #8+13=21迭代給下面 89 #7 90 #[1, 1, 2, 3, 5, 8, 13, 21] 91 #8 92 #[1, 1, 2, 3, 5, 8, 13, 21, 34] 93 #9 94 #[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 95 96 #for b in range(2,5): 97 # print(b) 98 99 print("==============") 100 #使用迭代會更加高效,以下函數會返回一個列表: 101 102 def fibo(num): 103 numList = [0,1] 104 105 for i in range(num - 2): 106 numList.append(numList[-2] + numList[-1]) 107 return numList 108 print(fibo(10)) 109 110 #另外一種方式如下,該函數只返回某一項: 111 112 def fibo(n): 113 x, y = 0, 1 114 115 while(n): 116 x,y,n = y, x+y, n - 1 117 return x 118 print(fibo(10)) 119 120 #采用尾遞歸的方式來編寫 121 122 def fibo(n): 123 def fib_iter(n,x, y): 124 if n == 0: 125 return x 126 else: 127 return fib_iter(n-1, y, x+y) 128 129 return fib_iter(n, 0, 1) 130 131 print(fibo(10))
#第七例:
題目:將一個列表的數據復制到另一個列表中。
程序分析:使用列表[:]。

1 a = [1, 2, 3] 2 b = a[:] 3 print(b)

1 ''' 2 使用 Python2 的參考解法: 3 4 >>> import copy 5 >>> a = [1, 2, 3] 6 >>> b=copy.copy(a) 7 >>> print(b) 8 [1, 2, 3] 9 10 使用 Python3 的參考解法: 11 12 >>> a = [1, 2, 3] 13 >>> b=a.copy() 14 >>> print(b) 15 [1, 2, 3] 16 ''' 17 18 #pythou3 19 20 a = [1,2,3] 21 b = a.copy() 22 print(b) 23 24 print("========") 25 26 #使用 for 循環出列表元素,並逐以放到新的列表中: 27 l = [1,2,3,4,5] 28 p = [] 29 for i in range(len(l)): 30 p.append(l[i]) 31 print(p) 32 33 print("========") 34 35 #使用列表生成式: 36 37 a=[1,2,3,4] 38 b=[i for i in a] 39 print(b) 40 41 print("========") 42 43 """將一個列表的數據復制到另一個列表中。""" 44 45 """ 46 使用[:] 47 48 """ 49 50 a = [1,2,3] 51 b = a[:] 52 print(b) # 將a的數據賦值給b 當a的數值發生改變時b不變 53 54 print("#") 55 56 a = [1,2,3] 57 b = a 58 print(b) # 將a的地址賦值給b 當a的數值發生改變時b隨之改變 59 60 print("#") 61 62 a = [1,2,3] 63 b = a[:] 64 print(b) 65 a[0] = 0 66 print(a) # 將a的數據賦值給b 當a的數值發生改變時b不變 67 print(b) 68 69 print("#") 70 71 a = [1,2,3] 72 b = a 73 print(b) 74 a[0] = 0 75 print(a) # 將a的地址賦值給b 當a的數值發生改變時b隨之改變 76 print(b) 77 78 print("===================") 79 80 a=[1,2,3,4,5] 81 b=list() 82 for i in a:b.append(i) 83 print(b) 84 85 print("===================") 86 87 #表1拓展到表2中 88 89 list1 = [1,2,3] 90 list2=[] 91 list2.extend(list1) 92 print(list2) 93 list1[0] = 0 94 print(list1) 95 print(list2) 96 97 98 99 print("===================") 100 101 #補充一個深拷貝與淺拷貝的問題 102 ''' 103 >>> import copy 104 >>> a = [1,2,3,4,5] 105 >>> b = ["A","B",a] 106 >>> #淺拷貝 107 >>> c = b[:] 108 >>> c 109 ['A', 'B', [1, 2, 3, 4, 5]] 110 >>> a[0] = 11 111 >>> c 112 ['A', 'B', [11, 2, 3, 4, 5]] 113 >>> #此時a變化c跟着變化 114 >>> #深拷貝 115 >>> c = copy.deepcopy(b) 116 >>> c 117 ['A', 'B', [11, 2, 3, 4, 5]] 118 >>> a[0] = 111 119 >>> a 120 [111, 2, 3, 4, 5] 121 >>> c 122 ['A', 'B', [11, 2, 3, 4, 5]] 123 >>> #此時c中數據不受a影響 124 >>> 125 126 '''
#第八例:
題目:輸出 9*9 乘法口訣表。
程序分析:分行與列考慮,共9行9列,i控制行,j控制列。

1 ''' 2 for i in range(1, 10): 3 for j in range(1, i+1): 4 print("%d*%d=%d" % (i, j, i*j)) 5 6 ''' 7 8 9 #python3改版 10 11 12 for i in range(1, 10): 13 for j in range(1, i+1): #end='\t' 作用是使代碼在同一行,並且代碼之間有空行,取消了換行的作用。 14 print("%d*%d=%d" % (i, j, i*j),end='\t') #\t可以換成空格一行,但是用\t,打印出來的表更好看 15 print(" ") #與一個for對齊了,起到了換行的作用。

1 ''' 2 #使用 Python3 測試輸出 9*9 乘法口訣表。 3 4 #使用while循環。 5 6 #!/usr/bin/python3 7 i=0 8 j=0 9 while i<9: 10 i+=1 11 while j<9: 12 j+=1 13 print(j,"x",i,"=",i*j,"\t",end="") 14 if i==j: 15 j=0 #清零 #該方法與下面的方法原理是一樣的 16 print("") 17 break 18 #使用for循環: 19 20 for i in range(1,10): 21 for j in range(1,10): 22 print(j, "x", i, "=", i * j,"\t",end="") 23 if i==j: 24 #print(i,j) #這一句就可以理解了 25 print("")#這里也起到的換行的作用。 26 break 27 28 print("=================") 29 #Python3 參考解法: 30 31 #!/usr/bin/python3 32 33 for i in range(1,10): 34 for j in range(1,i+1): 35 print("%d*%d=%d" % (i,j,i*j),end=" ") 36 print() 37 ''' 38 print("=================") 39 40 for i in range(1,10): 41 l=[] 42 for j in range(1,i+1): 43 l.append(str(j)+"*"+str(i)+"="+str(i*j)) 44 print("\t".join(l)) #join函數 45 46 print("=================") 47 48 #Python2.x 與 Python3.x 兼容方法: 49 50 #!/usr/bin/python 51 # -*- coding: UTF-8 -*- 52 53 ls = [] 54 for i in range(9): 55 s = [] 56 for j in range(i+1): 57 s.append("{}*{}={}".format(i+1, j+1, (i+1)*(j+1)))#因為i,j都是從0開始的所以要都加上1 58 s = ' '.join(s) 59 ls.append(s) 60 if i != 8: 61 ls.append('\n') 62 print(''.join(ls)) 63 64 print("=================") 65 66 #Python3 測試實例: 67 68 for j in range(9): 69 i = 1 70 j = j + 1 71 while(i<=j): 72 s = j*i 73 print('%dx%d=%d'%(i,j,s),end=' ') 74 i = i + 1 75 print(' ') 76 77 print("=================") 78 79 #Python3 測試: 80 81 for i in range(1,10): 82 for j in range(1,i+1): 83 k=i*j 84 print('{}*{}={}'.format(j,i,k),end='\t') 85 print('')

1 ''' 2 i = 1 3 while i<9: 4 #i+=1 5 for j in range(1,10): 6 print("%d*%d=%d" % (i,j,i*j),end="\t") 7 #print("") 8 i+=1 9 print("") 10 ''' 11 12 13 j=1 14 i = 1 15 while i<=9: 16 #i+=1 17 for j in range(1,j+1): 18 print("%d*%d=%d" % (i,j,i*j),end="\t") 19 j +=1 20 #print("") 21 i+=1 22 print("") 23 #print("") 24 25 print("\n") 26 print("=======================兩種不同的乘法表==========================") 27 print("\n") 28 29 j=1 30 i = 1 31 while i<=9: 32 for j in range(1,j+1): 33 print("%d*%d=%d" % (j,i,i*j),end="\t") #這里注意i與j的位置換一下 34 j +=1 35 i+=1 36 print("")
#第九例:
題目:暫停一秒輸出。
程序分析:使用 time 模塊的 sleep() 函數。

1 import time 2 3 myD = {1: 'a', 2: 'b'} 4 for key, value in dict.items(myD): 5 print(key, value) 6 time.sleep(1) # 暫停 1 秒

1 #每隔一秒輸出列表一個元素: 2 3 import time 4 5 l=[1,2,3,4] 6 for i in range(len(l)): 7 print(l[i]) 8 time.sleep(1) # 暫停一秒輸出
#第十例:
題目:暫停一秒輸出,並格式化當前時間。
程序分析:無。

1 import time 2 3 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) 4 5 # 暫停一秒 6 time.sleep(1) 7 8 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

1 import time,datetime 2 3 4 TIME = datetime.datetime.now() 5 print(TIME.strftime("%Y.%m.%d %H-%M-%S")) 6 7 time.sleep(1) 8 TIME = datetime.datetime.now() 9 print(TIME.strftime("%Y.%m.%d %H-%M-%S"))
附贈:Python100經典練習題------若鏈接掛了,請提醒我。
鏈接:https://pan.baidu.com/s/1l6R4KnHNJ7eGBzUqQ-sSXQ 密碼:fz1x
#待續: