#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
#待续: