运维之python学习第七天
1.练习
练习1. 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,>并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
代码:
num = int(input())
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
else:
return True
primeli = [i for i in range(2,num) if isPrime(i)]
print(primeli)
primecount = 0
# [2,3,5,7]
for item in primeli:
if (num - item) in primeli and item <= num - item: #只在num的一半进行数据运算
primecount += 1
print(primecount)
思路:要想查询整数的质数库,先要产生一个质数库,isprime()快速生成
关键点:生成质数和,转化一下求和的过程
练习2.
1.需求1:假设有20个学生,学生名为westosX,学生分数在60~100之间,筛选出
2.成绩在90分以上得学生
代码:
import random
stuInfo = {}
for i in range(20):
name = 'westos' + str(i)
score = random.randint(60,100)
stuInfo[name] = score
print(stuInfo)
highscore = {}
for name,score in stuInfo.items():
if score > 90:
highscore[name] = score
print(highscore)
进阶版:代码
print({name: score for name,score in stuInfo.items() if score > 90})
解析:重点
{}:表示打印的格式
name:score表示键和值
for name,score in stuInfo.items()表示键和值的for循环
if score > 90 :嵌套在for循环内
练习3.
#2.key --> upper
d = dict(a=1,b=2)
print({k.upper():v for k,v in d.items()})
练习4.
# 需求3:大小写key值合并,统一以小写输出
d = dict(a=2, b=1, c=2, B=9, A=10)
print({k.lower():d.get(k.lower(),0) + d.get(k.upper(),0) for k in d})
出现错误:
{<built-in method lower of str object at 0x0000019BDC3F84C8>: 12, <built-in method lower of str object at 0x0000019BDC4406C0>: 10, <built-in method lower of str object at 0x0000019BDC3F1DC0>: 10, <built-in method lower of str object at 0x0000019BDC417B20>: 12, <built-in method lower of str object at 0x0000019BDBFC6B90>: 2}
原因:
k.lower()处的()问题
2.高阶函数
返回函数的函数
1.求绝对值
f = abs
print(f(-10))
结果:
10
举例:
def fun(x,y,f):
return f(x),f(y)
print(fun(-10,34,abs))
结果:
10,34
3.内置高阶函数
- map()函数接收两个参数,一个是函数,一个是序列
map将传入的函数依次作用到序列的每个元素,并且把结果
作为新的序列返回
代码:
print(list(map(abs,[-1,3,-5,-4])))
打印10个2到7的数字积
import random
def f(x):
res = 1
for i in range(1,x+1):
res *= i
return res
li = [random.randint(2,7) for i in range(10)]
print(li)
print(list(map(f,li)))
- reduce:把一个函数作用在一个序列上,这个函数必须接收两个
参数,reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(x1,x2),x3),x4)
python2:reduce是内置函数
python3:from functools import reduce
from functools import reduce
def add(x,y):
return x+y
print(reduce(add,[1,2,3,4,5]))
3.filter过滤函数
和map()类似,也接收一个函数和一个序列
但是和map()不同的是,filter()把传入的函数依次作用于
每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
练习:过滤1到100所有的质数
#1~100 prime
def isodd(num):
if num % 2 == 1:
return True
else:
return False
print(list(filter(isodd,range(100))))
4.逆序排序
li = [2,1,3,4]
li.sort(reverse=True)
print(li)
print(sorted(li,reverse=True))
info = [
# 商品名称 商品数量 商品价格
('apple1',200,32),
('apple2',40,12),
('apple3',40,2),
('apple4',1000,23),
('apple5',40,5)
]
#
print(sorted(info))
def sorted_by_count(x):
return x[1]
def sorted_by_price(x):
return x[2]
def sorted_by_count_price(x):
return x[1],x[2]
print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))
[('apple1', 200, 32), ('apple2', 40, 12), ('apple3', 40, 2), ('apple4', 1000, 23), ('apple5', 40, 5)]
[('apple2', 40, 12), ('apple3', 40, 2), ('apple5', 40, 5), ('apple1', 200, 32), ('apple4', 1000, 23)]
[('apple3', 40, 2), ('apple5', 40, 5), ('apple2', 40, 12), ('apple4', 1000, 23), ('apple1', 200, 32)]
[('apple3', 40, 2), ('apple5', 40, 5), ('apple2', 40, 12), ('apple1', 200, 32), ('apple4', 1000, 23)]
- 匿名函数的关键字为lambda 冒号前面是形参 冒号后面是返回值
print(reduce(lambda x,y:x+y,[1,2,3,4]))
print(list(map(lambda x:x**2,range(5))))
print(list(filter(lambda x:x%2==0,range(100))))
print(sorted(nums,key=lambda x:1 if x == 0 else 0))
4.重点练习
(2018-携程-春招题)题目需求:
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0
7
0
2
输出:
调整后数组的内容;
4
7
2
0
0
代码:
n = ''.join(input().split())
li = [int(i) for i in n]
def move_zero(item):
if item == 0:
return 2
else:
return 1
print(sorted(li,key=move_zero))
思路:输入40702
4>1,0>2,…生成【12121】排序【11122】结果【47200】
return返回的2并非正式的数据,只是一种标志,与return x有本质的区别,并非只可以是1,2,如何的数据都可以
代码:
n=' '.join(input().split())
l=[int(i) for i in n]
def move(x):
if x==0:
return 1
else:
return 0
print(sorted(l,key=move))
5.如何快速生成验证码,内推码
代码:
import random
import string #随机字母
code_str = string.ascii_letters + string.digits
# print(code_str)
def gen_code(len=4):
# code = ''
# for i in range(len):
# new_s = random.choice(code_str)
# code += new_s
# print(code)
return ''.join(random.sample(code_str,len))
# a = gen_code()
# print(a)
print([gen_code(len=6) for i in range(100)])
print(random.sample(code_str,2))
解析:
random.sample(code_str,len) 随机选择len个数据
代码:
import random
import string
code_str=string.ascii_letters+string.digits
# print(code_str)
def fun(len=4):
return ''.join(random.sample(code_str,len))
print(fun())
print([fun() for i in range(100)])
print(random.sample(code_str,5))
上一篇: ionCube 一款类似zend的PHP加密/解密工具_php技巧
下一篇: php实现的分页工具类