Python例項集錦

appke_發表於2018-11-14

Python例項集錦

Python例項之一

有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?

使用三次迴圈

for x in range(1,5):
    for y in range(1,5):
        for z in range(1,5):
            if (x != y) and (x != z) and (y != z):
                print(x, y, z)

使用列表儲存結果

result=[]
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if( i != k ) and (i != j) and (j != k):
                result.append([i,j,k])
print("數量:{}".format(len(result)))
print(result)
數量:24
[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]
for  ite  in  result:
    print(ite[0])
mylist = [[1,5,6],[2,7,8],[3,9,10],[4,11,12]]
list1 = []
list2 = []
for it in mylist:
    list1 += [it[0]]
    list2 += it[1:]
print(list1)
print(list2)
[1, 2, 3, 4]
[5, 6, 7, 8, 9, 10, 11, 12]
mylist = [[1,5,6],[2,7,8],[3,9,10],[4,11,12]]
list1 = []
list2 = []
index = 1
for it in mylist:
    list1 += [it[index]]
    list2 += it[:index]
    list2 += it[index+1:]
print(list1)
print(list2)
[5, 7, 9, 11]
[1, 6, 2, 8, 3, 10, 4, 12]

減少迴圈冗餘的改進

for x in range(1,5):
    for y in range(1,5):
        if(y == x):
            continue
        for z in range(1,5):
            if(z == x or z == y):
                continue
            print(x, y, z)

使用permutations

result=[]
from itertools import permutations
for i in permutations([1, 2, 3, 4], 3):
    result.append(i)
print("數量:{}".format(len(result)))
print(result)  #每一項為元組
數量:24
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]

使用列表推導式

nums = [1,2,3,4]

print([(x,y,z) for x in nums for y in nums for z in nums if x!=y and x!=z and y!=z])
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]

Python例項之二

企業發放的獎金根據利潤提成。利潤(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,求應發放獎金總數?

使用 if-elif-else 多路分支

x = int(input("淨利潤:"))
if x<=100000:
    bonus=x*0.1
    print("獎金:",bonus,"元")
elif 100001<x<=200000:
    bonus=10000+(x-100000)*0.075
    print("獎金:",bonus,"元")
elif 200001<x<=400000:
    bonus=10000+7500+(x-200000)*0.05
    print("獎金:",bonus,"元")
elif 400001<x<=600000:
    bonus=10000+7500+10000+(x-400000)*0.03
    print("獎金:",bonus,"元")
elif 600001<x<=1000000:
    bonus=10000+7500+10000+6000+(x-600000)*0.015
    print("獎金:",bonus,"元")
elif 600001<x<=1000000:
    bonus=10000+7500+10000+6000+6000+(x-600000)*0.01
    print("獎金:",bonus,"元")
淨利潤:3232
獎金: 323.20000000000005 元

使用雙陣列的方式進行數軸定位


profit = int(input("淨利潤:"))
arr = [1000000, 600000, 400000, 200000, 100000, 0]
rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
bonus = 0
for idx in range(len(arr)):
    if profit > arr[idx]:
        bonus += (profit - arr[idx]) * rat[idx]
        profit = arr[idx]

print("獎金:", bonus)
淨利潤:12313
獎金: 1231.3000000000002

使用字典管理資料

i = int(input('淨利潤:'))
arr = {1000000:0.01,600000:0.015,400000:0.03,200000:0.05,100000:0.075,0:0.1}
r = 0
for idx in arr.keys():
    if i > idx:
        r += (i - idx) * arr[idx]
        i = idx
print(r)

封裝為函式,使用抽象遞迴減少重複工作量

profit = int(input("淨利潤:"))

def clac_bonus(I):
    bonus = 0
    if I <= 100000:
        bonus = I*0.1
    elif I <= 200000:
        bonus = (I-100000)*0.075 + clac_bonus(100000)
    elif I <= 400000:
        bonus = (I-200000)*0.05 + clac_bonus(200000)
    elif I <= 600000:
        bonus = (I-400000)*0.03 + clac_bonus(400000)
    elif I <= 1000000:
        bonus = (I-600000)*0.015 + clac_bonus(600000)
    else:
        bonus = (I-1000000)*0.01 + clac_bonus(1000000)
    return bonus

print("獎金:", clac_bonus(profit))
淨利潤:2342
獎金: 234.20000000000002

Python例項之三

一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程式分析:
假設該數為 x。
1、則:x + 100 = n2, x + 100 + 168 = m2
2、計算等式:m2 - n2 = (m + n)(m - n) = 168

計算公式

for m in range(168):
    for n in range(m):
        if (m+n)*(m-n)==168:
            x=n**2-100
            print("符合條件的整數有:",x)
符合條件的整數有: -99
符合條件的整數有: 21
符合條件的整數有: 261
符合條件的整數有: 1581

簡化公式


x + 100 = n^2

n^2 + 168 = m^2

令 m = n+k,

2nk + k^2 = 168,

k(2n + k) = 168, 必有一個是偶數,則都為偶數,

(k/2)(k/2 + n) = 42,

i(i+n) = 42, n > 0

所以 2 <= i <= 6


for i in range(1,7):
    n = 42 / i - i
    if int(n) == n:
        x = pow(n, 2) - 100
        print(int(x))
1581
261
21
-99

直接書寫條件-列表推導式

print([pow(n,2) - 100 for m in range(168) for n in range(m) if (m-n)*(m+n) == 168])
[-99, 21, 261, 1581]

Python例項之四

輸入某年某月某日,判斷這一天是這一年的第幾天?

程式分析:

以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於2時需考慮多加一天。

date = input("輸入年月日(yyyy-mm-dd):")
y,m,d = (int(i) for i in date.split('-'))
sum=0
special = (1,3,5,7,8,10)
for i in range(1,int(m)):
    if i == 2:
        if y%400==0 or (y%100!=0 and y%4==0):
            sum+=29
        else:
            sum+=28
    elif(i in special):
        sum+=31
    else:
        sum+=30
sum+=d
print("這一天是一年中的第%d天"%sum)
輸入年月日(yyyy-mm-dd):2018-4-5
這一天是一年中的第95天

使用 list 儲存月份資訊

months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

year = int(input("Year:"))
month = int(input("Month:"))
day = int(input("Day:"))

assert 0 < month < 13, "The month must be realistic"
assert 0 < day <= months[month], "The day must be realistic" 

if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
    months[1] += 1

sum_day = day
for idx in range(month-1):
    sum_day += months[idx]

print("It's the %dth day." % sum_day)
Year:2018
Month:4
Day:5
It's the 95th day.

使用字典儲存月份資訊

months = {1: 31, 
         2: 28, 
         3: 31, 
         4: 30,
         5: 31,
         6: 30, 
         7: 31, 
         8: 31,
         9: 30,
         10: 31,
         11: 30,
         12: 31}

def isLeapYear(year):
    if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
        return True
    else: 
        return False
    
year = int(input("Year:"))
month = int(input("Month:"))
day = int(input("Day:"))

assert 0 < month < 13, "The month must be realistic"
assert 0 < day <= months[month], "The day must be realistic" 

sum_day = day

for idx in range(1, month):
    sum_day += months[idx]

if isLeapYear(year):
    sum_day += 1

print("It's the %dth day." % sum_day)
Year:2018
Month:4
Day:5
It's the 95th day.

Python例項之五

輸入三個整數x,y,z,請把這三個數由小到大輸出。

if else多路分支

a, b, c = input("請輸入n個整數以逗號分隔:").split(',')

if a > b and a > c:
    print(a, ' ', end='')
    if b > c:
        print(b, c)
    else:
        print(c, b)
if b > a and b > c:
    print(b, ' ', end='')
    if a > c:
        print(a, c)
    else:
        print(c, a)
if a > a and c > b:
    print(c, ' ', end='')
    if a > c:
        print(a, c)
    else:
        print(c, b)
請輸入n個整數以逗號分隔:5,8,2
8  5 2

使用選擇排序

a = input("請輸入n個整數以逗號分隔:").split(',')

n=len(a)

for i in range(0,n):
  for j in range(i,n) :
     if (a[i] >= a[j] ):
         tmp =a[i]
         a[i]=a[j]
         a[j]=tmp

print(a)
請輸入n個整數以逗號分隔:4,2,6,5,3
['2', '3', '4', '5', '6']

使用氣泡排序

# 利用氣泡排序方法
def bubbleleSort(list):
    n = len(list)
    for i in range(1, n):
        # 一次次的將最大的學出來
        for j in range(1, n - i + 1):
            if list[j - 1] > list[j]:
                list[j - 1], list[j] = list[j], list[j - 1]
            # 列印排序過程
            print(list)
    for i in range(0, n):
        print(list[i])

# 讀入資料
def inputData():
    list_first = []
    while True:
        a = input("please input num:".strip())
        if len(a) == 0:
            return list_first
        else:
            list_first.append(int(a))

if __name__ == '__main__':
    lt = inputData()
    print(lt)
    bubbleleSort(lt)
please input num:3
please input num:1
please input num:2
please input num:
[3, 1, 2]
[1, 3, 2]
[1, 2, 3]
[1, 2, 3]
1
2
3

藉助列表進行排序

x = int(input("X:"))
y = int(input("Y:"))
z = int(input("Z:"))

lst = []
lst.append(x)
lst.append(y)
lst.append(z)

lst.sort()

for i in range(len(lst)):
    print(lst[i])
X:3
Y:1
Z:2
1
2
3
### 藉助字典進行排序
x = int(input("X:"))
y = int(input("Y:"))
z = int(input("Z:"))

a = {"x" : x,
     "y" : y,
     "z" : z}

for key in sorted(a, key=a.get):
    print(key, a[key])
X:3
Y:1
Z:2
y 1
z 2
x 3

Python例項之六

斐波那契數列。
程式分析:斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……。
在數學上,費波那契數列是以遞迴的方法來定義:

基本演算法

# 獲取使用者輸入資料
nterms = int(input("你需要幾項?"))
 
# 第一和第二項
n1 = 1
n2 = 1
count = 2
 
# 判斷輸入的值是否合法
if nterms <= 0:
   print("請輸入一個正整數。")
elif nterms == 1:
   print("斐波那契數列:")
   print(n1)
else:
   print("斐波那契數列:")
   print(n1,",",n2,end=" , ")
   while count < nterms:
       nth = n1 + n2
       print(nth,end=" , ")
       # 更新值
       n1 = n2
       n2 = nth
       count += 1
你需要幾項?10
斐波那契數列:
1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 

簡化演算法

i, j = 1, 1
while i < 10000:
    print(i,',', end='')
    i, j = i+j, i
    
1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 ,89 ,144 ,233 ,377 ,610 ,987 ,1597 ,2584 ,4181 ,6765 ,

使用函式封裝

def fib(n):
    a, b = 0, 1
    while n:
        a, b, n = b, a+b, n-1
        print(a)

fib(10)
1
1
2
3
5
8
13
21
34
55
def fib(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1, 1]
    fibs = [1, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs
 
# 輸出前 10 個斐波那契數列
print(fib(10))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

使用遞迴

def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-2) + fib(n-1)
    
fib(10)
55

使用 reduce 來簡化

from functools import reduce

lst = [1, 1]
for idx in range(9):
    lst.append(reduce(lambda x, y : x + y, lst[-1:-3:-1]))
    
print(lst)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

Python例項之七

古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
程式分析:兔子的規律為數列1,1,2,3,5,8,13,21…,實際上就是斐波拉契數列

f1 = 1
f2 = 1
for i in range(1,22):
    print('%12ld %12ld' % (f1,f2),end=' ')
    if (i % 3) == 0:
        print()
    f1 = f1 + f2
    f2 = f1 + f2
           1            1            2            3            5            8 
          13           21           34           55           89          144 
         233          377          610          987         1597         2584 
        4181         6765        10946        17711        28657        46368 
       75025       121393       196418       317811       514229       832040 
     1346269      2178309      3524578      5702887      9227465     14930352 
    24157817     39088169     63245986    102334155    165580141    267914296 

Python例項之八

輸出 9*9 乘法口訣表

使用 for 迴圈,控制行和列

for i in range(1, 10):
    print()
    for j in range(1, i+1):
        #print("%d*%d=%d" % (j, i, j*i),end='\t')
        print("{}*{}={}".format(i,j,i*j), end="\t")
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

列表推導式

print('\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

長方形完整形式

for i in range(1,10):
    for j in range(1,10):
        print(" %d*%d=%2d "% (i, j, i*j), end='')
    print("")
 1*1= 1  1*2= 2  1*3= 3  1*4= 4  1*5= 5  1*6= 6  1*7= 7  1*8= 8  1*9= 9 
 2*1= 2  2*2= 4  2*3= 6  2*4= 8  2*5=10  2*6=12  2*7=14  2*8=16  2*9=18 
 3*1= 3  3*2= 6  3*3= 9  3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27 
 4*1= 4  4*2= 8  4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36 
 5*1= 5  5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45 
 6*1= 6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54 
 7*1= 7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63 
 8*1= 8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72 
 9*1= 9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81 

左上角三角形

for i in range(1,10):
    for j in range(i,10):
        print( "%d*%d=%-4d"%(i,j,i*j), end='')
    print("")
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
6*6=36  6*7=42  6*8=48  6*9=54  
7*7=49  7*8=56  7*9=63  
8*8=64  8*9=72  
9*9=81  

右上三角形

for i in range(1,10):
    for k in range(1,i):
        print("        ", end = '')
    for j in range(i,10):
        print("%d*%d=%-4d" % (i, j, i*j), end='')
    print ("")
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
        2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
                3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
                        4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
                                5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
                                        6*6=36  6*7=42  6*8=48  6*9=54  
                                                7*7=49  7*8=56  7*9=63  
                                                        8*8=64  8*9=72  
                                                                9*9=81  

右下角三角形

for i in range(1,10):
    for k in range(1, 10-i):
        print ("        ", end='')
    for j in range(1 ,i+1):
        print("%d*%d=%-4d" % (i, j, i*j), end='')
    print("")
                                                                1*1=1   
                                                        2*1=2   2*2=4   
                                                3*1=3   3*2=6   3*3=9   
                                        4*1=4   4*2=8   4*3=12  4*4=16  
                                5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
                        6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
                7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
        8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  

Python例項之九

判斷101-200之間有多少個素數,並輸出所有素數。
程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。

from math import sqrt

count=0
pn=1
for i in range(101,201):
    k=int(sqrt(i))
    for j in range(2,k+1):
        if i%j==0:
            pn=0
            break
    if pn==1:
        count+=1
        print(i,end=' ')
    pn=1
print()
print("total number is %d"%count)
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 
total number is 21
#排除法
import math
m=range(101,201)
p=list(m)
for i in range(101,201):
    for j in range(2,int(math.sqrt(i)+1)):
        if i % j == 0:
            p.remove(i)
            break
print(p)
print("101至200之間的素數一共有%d個"%len(p))

Python例項之十

列印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
程式分析:利用for迴圈控制100-999個數,每個數分解出個位,十位,百位。

L = []
for n in range(100,1000):
	i = n // 100
	j = n // 10 % 10
	k = n % 10
	if n == i ** 3 + j ** 3 + k ** 3:
		L.append(n)
print(L)
print(len(L))
#基於字串列表
for i in range(100, 1000):
    s = str(i)
    if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i:
        print(i,end=' ')

Python例項之十一

將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。
程式分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。
(2)如果n<>k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,重複執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。

x = int(input("是否進入迴圈?是:1, 否:0\n"));
while(x):
    n = int(input("請輸入一個正整數:"));
    print ("%d = " %n , end = '');
    while n not in [1]:
        for index in range(2, n+1):
            if n % index == 0:
                n = int(n/index);
                if n == 1:
                    print("%d " %index , end = '');
                else:
                    print("%d * " %index , end = '')
                break;
    print();
    x = int(input("是否進入迴圈?是:1, 否:0\n"));
#基於函式
def prime(n):
    l = []
    while n > 1:
        for i in range(2, n + 1):
            if n % i == 0:
                n = int(n / i)
                l.append(i)
                break    
    return l


s = input("輸入一個正整數:")
if s.isdigit() and int(s) > 0:
    print(s, "=", "*".join([str(x) for x in prime(int(s))]))
else:
    print("請輸入正確的正整數")

Python例項之十二

利用條件運算子的巢狀來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
程式分析:程式分析:(a>b)?a:b這是條件運算子的基本例子。

a=int(input('輸入分數:'))
print('A' if a>89 else ('B' if a>59 else 'C'))
i= int(input('請輸入成績:'))
ar= [90,60,0]
res= ['A','B','C']
for idx in range (0,3):
	if i >=ar[idx]:
		print(res[idx])
		break

Python例項之十三

輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
程式分析:利用is開頭的判斷函式

InPut = input('輸入任意字元:')
letters = []
spaces = []
digits = []
others = []
for i in iter(InPut):
    if i.isalpha() == True:
        letters.append(i)
    elif i.isspace() == True:
        spaces.append(i)
    elif i.isdigit() == True:
        digits.append(i)
    else:
        others.append(i)
print('''
字母: {}, 個數: {};
空字元: {}, 個數: {};
數字: {}, 個數: {};
其他: {}, 個數: {}'''.format(letters, len(letters), spaces, len(spaces), digits, len(digits), others, len(others)))

Python例項之十四

求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
程式分析:關鍵是計算出每一項的值。

n = int(input('n = '))
a = int(input('a = '))
sum_ = 0
total = 0
for i in range(n):
    sum_ += (10 ** i)
    total += sum_ * a
print(total)

Python例項之十五

一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.程式設計找出1000以內的所有完數。
程式分析:參見Python例項之十一,分解質因數

for i in range(1, 1001):
    sum = 0
    for j in range(1, i // 2 +1):
        if i % j == 0:
            sum += j
    if sum == i:
        print(i)

Python例項之十六

一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?

h = 100.0         # 總高度
tim = 10          # 次數
hei = []       # 每次反彈高度
for i in range(2,tim+1):  # 計算第二次落地到第十次落地
    h = h / 2
    hei.append(h)
sumhei = sum(hei)
print('第10次落地時,反彈%s高'%(min(hei)/2))        # 第十次反彈為第十次落地距離的一半
print('第10次落地時,經過%s米'%(2 * sumhei + total))   # 總和加上第一次的 100

Python例項之十七

猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
程式分析:採取逆向思維的方法,從後往前推斷。

x = 1
for day in range(0,9):
	x = (x+1)*2
print(x)

Python例項之十八

兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請程式設計序找出三隊賽手的名單。

n=['a','b','c']
m=[]
for i in range(3):
    if n[i]!='a' and n[i]!='c':
        m.insert(i,'x')
    elif n[i]!='c':
        m.insert(i,'z')
    else:
        m.insert(i,'y')

print('a--%s, b--%s, c--%s' %(m[0], m[1], m[2]))
for a in ['x','y','z']:
    for b in ['x', 'y', 'z']:
        for c in ['x', 'y', 'z']:
            if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
                print('a和%s比賽,b和%s比賽,c和%s比賽' %(a,b,c))

Python例項之十九

有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。
程式分析:請抓住分子與分母的變化規律。

a = 2
b = 1
l = []
for n in range(1,21):
    l.append(a / b)
    b,a = a,a + b
print(sum(l))

Python例項之二十

求1+2!+3!+…+20!的和。

s = 0
for i in range(1, 21):
    r = 1
    for j in range(1, i+1):
        r *= j
    s += r
print(s)
## http://www.runoob.com/python3/python3-examples.html

相關文章