python实例100例精选50例(基于python3.7,数据分析方向)

网上例子是基于2.7版的,花了一个周末挑选了一些比较有代表性的写成了3.7版,案例为夯实基础用的,为了避免大家做无用功,删除了那些鸡肋的案例

分解质因数

def cal(n):
    list = []
    if not isinstance(n, int) or n<=2:
        return "not int or < 3"
    flag = 1
    while flag:
        for i in range(2,int(n+1)):
            if n%i == 0:
                list.append(i)
                n/=i
                if n==1:
                    flag = 0
                break
    return list


print(cal(28))

高空抛物

题目 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

def test(n):
    base = 10
    sum = 10
    if n ==1:
        return sum
    for i in  range(1,n):
        base /=2
        sum+=base*2
    return sum

print(test(3))

画菱形

def draw(num):
    a="*"*(2*(4-num)+1)
    print(a.center(9,' '))
    if num!=1:
        draw(num-1)
        print(a.center(9,' ')) #此句从最底层draw(1)到draw(4)执行
draw(4) 
	*
   ***
  *****
 *******
  *****
   ***
    *

斐波那契数列II

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

#方法一
def add(n):
    if n == 1:
        return 2
    elif n == 2:
        return 3
    return add(n-1) +add(n-2)

def add2(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    return add2(n-1) +add2(n-2)

sum = 0
for  i in range(1,21):
    sum += add(i)/add2(i)

print(sum)

#方法二
a = 2.0
b = 1.0
s = 0
for n in range(1,21):
    s += a / b
    a,b = a + b,a
print (s)

阶乘求和

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

def test(n):
    if n == 1 or n == 2:
        return n
    else :
        return n*test(n-1)

sum = 0
for i in range(1,21):
    sum += test(i)

print(sum)

递归求等差数列

def test(n):
    if n == 1:
        return 10   #递归的核心在于可以溯源,此类型的源就是 No.1 = 10
    else:
        return 2 + test(n-1) #2是等差的差值

逆序打印

a = 'testing'

print(a[::-1]) #逆序打印

字母识词

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#下次自己写

列表转字符串

list = ['b','c','d']
strs = ''
print(strs.join(str(a) for a in list) ) #python 独有语法结构

作用域

在if-elif-else、for-else、while、try-except\try-finally等关键字的语句块中并不会产成作用域

if True:
    var = 100
    print(var)
print('******')
print(var) #都是100

try except break练习

while True:
    try:
        n = float(input('请输入一个数字:'))
    except:
      print("输入异常")
      continue
    dn = n**2
    if dn >50:
        break

lambda表达式

lambda表达式支持有限逻辑的函数

g = lambda x:x+1  #基础语法

print(g(2))
############################
g = lambda x,y:x+y+1 #双变量

print(g(3,4))
############################
#lambda存在意义就是对简单函数的简洁表示



组成list的巧妙用法

print(list(i for i in range(10))) #直接用range(10) 会报错,必须单元素罗列
l = [1 for i in range(n)]  #可指定列表长度

filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

def is_odd(n):
    return n%2 ==1


l = list(i for i in  range(10))

a = filter(is_odd,l)

for i in a:
    print(i)
    
 #方法二
l = list(i for i in  range(10))

a = filter(lambda x:x%2==1,l) #简单函数可以用lambda表达式来实现

for i in a:
    print(i)
 #a = filter(lambda x:x%2,l)  这样写也对
#原因: 返回值是0 python默认是false 也能过滤掉

三元运算

name = 'wupeiqi' if 1 == 1 else 'alex' #把if条件一改可以组成很简练的逻辑代码

map

遍历序列,对序列中每个元素进行操作,最终获取新的序列。

l = [1,2,3,4]

ll = list(map(lambda x:x+1,l))  #用list把map对象转换为list对象
#区别filter filter是对列表筛选 map是加工处理

#进阶用法
list1 = [1,2,3,4]
list2 = [5,6,7,8]
b = list(map(lambda x,y:x+y, list1, list2)) 
print(b)  对两个列表的元素一一对应相加
#[6, 8, 10, 12]

reduce

reduce 是对可迭代对象进行累计操作

from functools import reduce

l = list(i for i in range(10))

result = reduce(lambda x,y:x+y,l)
print(l,result)

list

aTuple = (123, 'xyz', 'zara', 'abc');
aList = list(aTuple)  #将元组转换为列表

#或者:
list(i for i in range(10))

random

import random
print(random.random()) #0到1取随机浮点数

print(random.randint(2,20)) # 2 到20取随机整数

print(random.uniform(10,20))# 10到20取随机浮点数

print(random.choice('test'))# 'test'取随机字母

print(random.choice([1,2,3,4])) #列表取随机元素

print(random.randrange(1,100,2)) #1到99 步长为2 取随机数
print(random.randrange(1,100))# 1到99取随机整数

a = list(i for i in range(10)) 

random.shuffle(a) #把a中元素打乱

print(a)

list 的extend or +

l = []
l.extend([1,1]) #list追加多个元素

ll = [1]
test = ll +[0]
print(test)
test = test +[0,1,2,3]  #直接列表追加多个元素
print(test)

输出杨辉三角第n行

def test(n):
    dd = {}
    if n == 1:
        dd[1]=[1]
    elif n == 2:
      dd[2]=[1,1]
      dd[1]=[1]
    if n >= 3:
        dd[n] = [1 for i in range(n)]
        for i in range(n):
            if i == 0 or i == n-1:
                continue
            else:
               dd[n][i] = test(n - 1)[n-1][i - 1] + test(n - 1)[n-1][i]
#不能用test(n)[n][i] 报错 RecursionError: maximum recursion depth exceeded in 	comparison	
    return dd

print(test(5))

###############网上大神级的例子,用错位相加方法
def generate(numRows):
    r = [[1]]
    for i in range(1,numRows):
        r.append(list(map(lambda x,y:x+y, [0]+r[-1],r[-1]+[0])))
    return r[:numRows]
a=generate(10)
for i in a:
    print(i)
 

find字符串查找

s1='aabbxuebixuebi'
s2='ab'
s3='xue'
print(s1.find(s2))
print(s1.find(s3)) #计数s3前面有多少个字符 
#返回 1   4

list中最大最小值

li=[3,2,5,7,8,1,5]

li[-1],li[li.index(min(li))]=li[li.index(min(li))],li[-1]

m=li[0]
ind=li.index(max(li))
li[0]=li[ind]
li[ind]=m

print(li)

旋转数列

from collections import *
li=[1,2,3,4,5,6,7,8,9]
deq=deque(li,maxlen=len(li))
print(li)
deq.rotate(int(input('rotate:')))
print(list(deq))

if not

def test(var):
    if not var:
        print('111')
    else:
        print("222")

test('')  #结果是 111

def test2(var):
    if var:
        print('333')
    else:
        print('444')

test2('23213')  #结果是333
#在python 判断语句中 None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于 False 
 
#not None == not False == not '' == not 0 == not [] == not {} == not ()

猴子分桃子

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
i=1      #核心是如何找出有限循环的条件
n=0
flag = False
while True:
    n=4*i
    for j in range(1,6):
       if n%4 != 0:
           break
       else:
            n = n * 5 / 4 + 1
            if j ==5:
                flag = True
    if flag:
        break
    i+=1

print(n)

for k in range(1,6):  #校验是否准确
    n =(n-1)*4/5
    print(n)

join字符串拼接

join将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist))
print(''.join(mylist))

随机奇数判断能被多少位9整除

题目 输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。

如 999999 / 13 = 76923

def test(n):
    i = 0
    while True:
        sum=0
        for j in range(i+1):
            sum +=9*10**j
        if sum%n != 0:
            i+=1
        else:
            break
    print(sum)
    print(len(str(sum)))

test(17)

打印多个相同字符串

读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

print("test"*3) #结果是:testtesttest 
import random
for i in range(6):
    a = random.randint(1,50)
    print('*'*a +str(a))

解码

题目 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

def test(n):
    nn = str(n)
    a =[]
    for i in  nn:
        temp = (int(i)+5)%10
        a.append(temp)
    print(a)
    a[0],a[3]=a[3],a[0] #可不用使用中间变量,牢记此用法
    a[1],a[2]=a[2],a[1]
    print(a)

test(1234)

列表的拓展用法

挪用别人的材料

# list
# 新建列表
testList = [10086, '中国移动', [1, 2, 4, 5]]

#弹出z指定位置元素
print (testList.pop(0)  )
print (len(testList)  )
print(testList)

matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print (matrix  )
col2 = [row[1] for row in matrix]#get a  column from a matrix
print (col2  )
col2even = [row[1] for row in matrix if  row[1] % 2 == 0]#filter odd item
print (col2even)

time模块用法

import time
start = time.time()
for i in range(3000):
    print(1,end="")

end = time.time()
print(end-start)  #测运行时间


#cttime 用法
print(time.ctime(time.time()))#源码中注释:Convert a time in seconds since the Epoch to a string in local time.

分析子串在母字符串出现次数

s1='xuebixuebixuebixuebixuebixuebixuebixue'
s2='xuebi'
print(s1.count(s2))

磁盘写入

从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。


# fp = open('c:\copy.txt','w') 先试试怎么用
# fp.write('testing')
# fp.close()

fp = open('c:/copy.txt', 'w') # 注意open放在循环外面才能连续写入
while True:
    i = input("input your words:")
    if i != '#':
        fp.write(i)
        print("写入成功")
    else:
        break
fp.close()
print('写入完成')

列表转字典 拉链函数zip用法

i = ['a', 'b']
l = [1, 2]
print (dict(zip(i,l)))
发布了11 篇原创文章 · 获赞 2 · 访问量 1516

猜你喜欢

转载自blog.csdn.net/mostermoonsky/article/details/103841052
今日推荐