Python实例集锦

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

你可能感兴趣的:(python)