网上例子是基于2.7版的,花了一个周末挑选了一些比较有代表性的写成了3.7版,案例为夯实基础用的,为了避免大家做无用功,删除了那些鸡肋的案例
文章目录
- 分解质因数
- 高空抛物
- 画菱形
- 斐波那契数列II
- 阶乘求和
- 递归求等差数列
- 逆序打印
- 字母识词
- 列表转字符串
- 作用域
- try except break练习
- lambda表达式
- 组成list的巧妙用法
- filter函数
- 三元运算
- map
- reduce
- list
- random
- list 的extend or +
- 输出杨辉三角第n行
- find字符串查找
- list中最大最小值
- 旋转数列
- if not
- 猴子分桃子
- join字符串拼接
- 随机奇数判断能被多少位9整除
- 打印多个相同字符串
- 解码
- 列表的拓展用法
- time模块用法
- 分析子串在母字符串出现次数
- 磁盘写入
- 列表转字典 拉链函数zip用法
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)
*
***
*****
*******
*****
***
*
有一分数序列: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
while True:
try:
n = float(input('请输入一个数字:'))
except:
print("输入异常")
continue
dn = n**2
if dn >50:
break
lambda表达式支持有限逻辑的函数
g = lambda x:x+1 #基础语法
print(g(2))
############################
g = lambda x,y:x+y+1 #双变量
print(g(3,4))
############################
#lambda存在意义就是对简单函数的简洁表示
print(list(i for i in range(10))) #直接用range(10) 会报错,必须单元素罗列
l = [1 for i in range(n)] #可指定列表长度
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条件一改可以组成很简练的逻辑代码
遍历序列,对序列中每个元素进行操作,最终获取新的序列。
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 是对可迭代对象进行累计操作
from functools import reduce
l = list(i for i in range(10))
result = reduce(lambda x,y:x+y,l)
print(l,result)
aTuple = (123, 'xyz', 'zara', 'abc');
aList = list(aTuple) #将元组转换为列表
#或者:
list(i for i in range(10))
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)
l = []
l.extend([1,1]) #list追加多个元素
ll = [1]
test = ll +[0]
print(test)
test = test +[0,1,2,3] #直接列表追加多个元素
print(test)
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)
s1='aabbxuebixuebi'
s2='ab'
s3='xue'
print(s1.find(s2))
print(s1.find(s3)) #计数s3前面有多少个字符
#返回 1 4
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))
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将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist))
print(''.join(mylist))
题目 输入一个奇数,然后判断最少几个 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)
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('写入完成')
i = ['a', 'b']
l = [1, 2]
print (dict(zip(i,l)))