更多的精彩内容请关注公众号凡花花的小窝,里面含有关于计算机专业的各种知识,各个大学的课件,题目,还有资源。
Python编程
100例
来源自RUNOOB.COM
列表转换为字典。
i = [‘a’, ‘b’] l = [1, 2] print dict([i,l])
#!/usr/bin/python
l1=[1,2,3,6,87,3]
l2=[‘aa’,‘bb’,‘cc’,‘dd’,‘ee’,‘ff’]
d={}
for index in range(len(l1)):
d[l1[index]]=l2[index] # 注意,key 若重复,则新值覆盖旧值
print d
#!/usr/bin/python3# -- coding: UTF-8 --
i = [‘a’,‘b’,‘c’]
l = [1,2,3]
b=dict(zip(i,l))print(b)
#!/usr/bin/python# -- coding: UTF-8 --
keys = [‘a’, ‘b’]
values = [1, 2]print({keys[i]: values[i] for i in range(len(keys))})
#!/usr/bin/python# -- coding: UTF-8 --
l1 = [‘a’,‘b’,‘c’]
l2 = [1,2,3]
d = {}for i in range(len(l1)):
d.setdefault(l1[i],l2[i])print d
Map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,
并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每个元素都作平方,就可以用map()函数:
因此,我们只需要传入函数f(x)=xx,就可以利用map()函数完成这个计算:
def f(x):
return xx
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
输出结果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]
注意:map()函数不改变原有的 list,而是返回一个新的 list。
由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,
事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。
任务
假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数
,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
输入:[‘adam’, ‘LISA’, ‘barT’]
输出:[‘Adam’, ‘Lisa’, ‘Bart’]
def format_name(s):
s1=s[0:1].upper()+s[1:].lower();
return s1;
print map(format_name, [‘adam’, ‘LISA’, ‘barT’])
利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。
map()函数是python内置的高阶函数,对传入的list的每一个元素进行映射,返回一个新的映射之后的list
使用map()函数可以实现将其他类型的数转换成list,但是这种转换也是有类型限制的,具体什么类型限制,
在以后的学习中慢慢摸索吧。这里给出几个能转换的例子:
将元组转换成list
map(int, (1,2,3))
[1, 2, 3]
将字符串转换成listmap(int, ‘1234’)
[1, 2, 3, 4]
提取字典的key,并将结果存放在一个list中map(int, {1:2,2:3,3:4})
[1, 2, 3]
字符串转换成元组,并将结果以列表的形式返回map(tuple, ‘agdf’)
[(‘a’,), (‘g’,), (‘d’,), (‘f’,)]
#将小写转成大写
def u_to_l (s):
return s.upper()
print map(u_to_l,‘asdfd’
print map(None, [2,4,6],[3,2,1])
*** 判断list 中重复出现的次数
方法一:
mylist = [1,2,2,2,2,3,3,3,4,4,4,4]
myset = set(mylist) #myset是另外一个列表,里面的内容是mylist里面的无重复 项
for item in myset:
print(“the %d has found %d” %(item,mylist.count(item)))
方法二:
List=[1,2,2,2,2,3,3,3,4,4,4,4]
a = {}
for i in List:
if List.count(i)>1:
a[i] = List.count(i)
print (a)
方法三:利用字典的特性来实现。from collections import Counter
Counter([1,2,2,2,2,3,3,3,4,4,4,4])
Counter({1: 5, 2: 3, 3: 2})
这里再增补一个只用列表实现的方法:
l=[1,4,2,4,2,2,5,2,6,3,3,6,3,6,6,3,3,3,7,8,9,8,7,0,7,1,2,4,7,8,9]
count_times = []
for i in l :
count_times.append(l.count(i))
m = max(count_times)
n = l.index(m)
print (l[n])
方法四:
len(list) == len(set(list))
r = range(ord(‘a’), ord(‘z’) + 1)
a = (i for i in r)
b = map(chr, r)
print(dict(zip(a, b)))
99
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
#!/usr/bin/python # -- coding: UTF-8 --
if name == ‘main’:
import string
fp = open(‘test1.txt’)
a = fp.read()
fp.close()
fp = open(‘test2.txt’)
b = fp.read()
fp.close()
fp = open(‘test3.txt’,‘w’)
l = list(a + b)
l.sort()
s = ‘’
s = s.join(l)
fp.write(s)
fp.close()
#!/usr/bin/python# -- coding: UTF-8 --
def read(filename):
f = open(filename,“r+”)
a = f.readlines()
return a
s = list("".join(read(“test1.txt”)+read(“test2.txt”)))
s.sort()
s1 = “”.join(s)
t = open(“test.txt”,“w+”)
t.writelines(s1)
t.close()
with open(‘test1.txt’) as f1, open(‘test2.txt’) as f2, open(‘2.txt’, ‘w’) as f3:
for a in f1:
b = f2.read()
c = list(a + b)
c.sort()
d = ‘’
d = d.join©
f3.write(d)
98
从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
if name == ‘main’:
fp = open(‘test.txt’,‘w’)
string = raw_input(‘please input a string:\n’)
string = string.upper()
fp.write(string)
fp = open(‘test.txt’,‘r’)
print fp.read()
fp.close()
import sys
str = input(‘请输入一个字符串:\n’)with open(‘test1.txt’,‘w’) as f:
f.write(str.upper())
97
从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
#!/usr/bin/python # -- coding: UTF-8 --
if name == ‘main’:
from sys import stdout
filename = raw_input(‘输入文件名:\n’)
fp = open(filename,“w”)
ch = raw_input(‘输入字符串:\n’)
while ch != ‘#’:
fp.write(ch)
stdout.write(ch)
ch = raw_input(’’)
fp.close()
#!/usr/bin/python3
filename = input(‘输入文件名:\n’)
fp = open(filename , “w+”)
ch = ''while ‘#’ not in ch:
fp.write(ch)
ch = input(‘输入字符串:\n’)
fp.close()
96
计算字符串中子串出现的次数。
程序分析:无。
实例(Python 2.0+)
#!/usr/bin/python # -- coding: UTF-8 --
if name == ‘main’:
str1 = raw_input(‘请输入一个字符串:\n’)
str2 = raw_input(‘请输入一个子字符串:\n’)
ncount = str1.count(str2)
print ncount
#!/usr/bin/python3
if name == “main”:
str1 = input(“请输入一个字符串:”)
str2 = input(“请输入一个子字符串: “)
print(str1.count(str2))
95
字符串日期转换为易读的日期格式。
from dateutil import parser
dt=parser.parse(“Aug 28 2015 12:00AM”)
print dt
94
时间函数举例4,一个猜数游戏,判断一个人反应快慢。
import time
import random
start=time.time()
while True:
play=input(‘play thie game(y/n)?’)
if play==‘y’:
number=random.randint(0,1000)
guess=int(input(‘guess a number’))
while True:
if number>guess:
guess=int(input(“guess a bigger number!”))
elif number
else:
end=time.time()
print “bingo”
print u”%0.2fs猜中”%(end-start)
break
else:
Break
#!/usr/bin/python # -- coding: UTF-8 --
if name == ‘main’: i
mport time
import random
play_it = raw_input(‘do you want to play it.(‘y’ or ‘n’)’)
while play_it == ‘y’:
c = raw_input(‘input a character:\n’)
i = random.randint(0,2**32) % 100
print ‘please input number you guess:\n’
start = time.clock()
a = time.time()
guess = int(raw_input(‘input your guess:\n’))
while guess != i:
if guess > i:
print ‘please input a little smaller’
guess = int(raw_input(‘input your guess:\n’))
else: print ‘please input a little bigger’
guess = int(raw_input(‘input your guess:\n’))
end = time.clock()
b = time.time()
var = (end - start) / 18.2
print var # print ‘It took you %6.3 seconds’ % time.difftime(b,a))
if var < 15:
print ‘you are very clever!’
elif var < 25:
print ‘you are normal!’
else:
print ‘you are stupid!’
print ‘Congradulations’
print ‘The number you guess is %d’ % i
play_it = raw_input(‘do you want to play it.’)
93
if name==‘main’:
import time
start=time.clock()
for i in range(10000):
print i
end=time.clock()
print ‘different is %6.3f’%(end -start)
92
if name == ‘main’:
import time
start = time.time()
for i in range(3000):
print i
end = time.time()
print end - start
91
idi***[email protected]
用 timeit 模块实现的参考方法:
def test():
for i in range(3000):
print(i)
if name == ‘main’:
from timeit import timeit
t = timeit(‘test()’, ‘from main import test’, number = 1)
print(t)
Timeit模块
import timeit
#执行命令t2 = timeit.Timer(‘x=range(1000)’)
#显示时间t2.timeit()
10.620039563513103
#执行命令
t1 = timeit.Timer(‘sum(x)’, ‘x = (i for i in range(1000))’)
#显示时间t1.timeit()
0.1881566039438201
In [1]: from timeit import timeit as timeit
In [2]: timeit(‘x=1’)
Out[2]: 0.03820111778328037
In [3]: timeit(‘x=map(lambda x:x*10,range(32))’)
Out[3]: 8.05639690328919
from timeit import timeit
from timeit import repeat
t1 = timeit(“x=1”)
print(“t1”, t1)
t2 = timeit(‘x=1’, number=1)
print(“t2”, t2)
t3 = timeit(’[i for i in range(10000)]’, number=1)
print(“t3”, t3)
t4 = timeit(’[i for i in range(100) if i%2==0]’, number=10000)
print(“t4”, t4)
def func():
s = 0
for i in range(1000):
s += i
t5 = timeit(‘func()’, ‘from main import func’, number=1000)
print(“t5”, t5)
#repeat参数,表示重复测试的次数(可以不写,默认值为3.),返回值为一个时间的列表。
t6 = repeat(‘func()’, ‘from main import func’, number=100, repeat=5)
print(“t6”, t6)
print(“min(t6):”, min(t6)
t1 0.0225759230015683
t2 9.750001481734216e-07
t3 0.0010709300040616654
t4 0.08248432799882721
t5 0.06885779099684441
t6 [0.007719596003880724, 0.007121836002625059, 0.007838689998607151, 0.00810356400324963, 0.007577656004286837]
min(t6): 0.007121836002625059
“”"
value=float(input(‘请输入长度:’))
unit=input(‘请输入单位:’)
if unit==‘in’ or unit==‘英寸’:
print(’%f英寸=%f厘米’%(value,value*2.54))
elif unit==‘cm’ or unit==‘厘米’:
print(’%f厘米=%f英寸’%(value,value/2.54))
else:
print(‘请输入有效的单位’)
score=float(input(‘请输入成绩:’))
if score>=90:
grade=‘A’
elif score>=80:
grade=‘B’
elif score>=70:
grade=‘C’
elif score>=60:
grade=‘D’
else:
grade=‘E’
print(‘对应的等级是:’,grade)
x=float(input(‘x=’))
if x>1:
y=3x-5
elif x>=-1:
y=x+2
else:
y=5x+3
print(‘f(%.2f)=%.2f’%(x,y))
from random import randint
face=randint(1,6)
if face1:
result=‘唱首歌’
elif face2:
result=‘跳个舞’
elif face4:
result=‘做俯卧撑’
elif face5:
result=‘绕口令’
else:
result=‘讲冷笑话’
print(result)
import math
a=float(input(‘a=’))
b=float(input(‘b=’))
c=float(input(‘c=’))
if a+b>c and a+c>b and b+c>a:
print(‘周长:%f’%(a+b+c))
area=math.sqrt(p*(p-a)(p-b)(p-c))
print(‘面积%f’%(area))
else:
print(‘不能构成三角形’)
Python中的getpass模块介绍
getpass模块提供了平台无关的在命令行下输入密码的方法,该模块主要提供了:
Getpass输入密码时,如果想要不可见,需要利用getpass模块中的getass方法。
Getpass.getuser()该函数返回登陆的用户名,不需要参数,该函数会检查环境变量,LOGNAME,USER,LNAME,USERNAME,以返回一个非空字符串,如果这些变量设置为空的话,会从支持密码的数据库中获取用户名,否则会触发一个找不到用户名的异常
Getpass模块提供了平台无关的在命令行下输入密码的方法
Getpass(prompt)会显示提示的字符串,关闭键盘的屏幕反馈,然后读取密码
如果提示参数省略,那么他将打印出,Password
getUser()获取当前的用户名,
import getpass
from getpass import getpass
from getpass import.*
username=input(‘请输入用户名’)
passsword=input(‘请输入口令:’)
if username==‘admin’ and password==‘123456’:
print(‘身份验证成功!’)
else:
print(‘身份验证失败!’)
for-in循环
如果明确的知道循环执行的次数或者是要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in循环,例如下面代码中计算 ∑ n = 1 100 n \sum_{n=1}^{100}n ∑n=1100n。
sum=0
for x in range(101):
sum+=x
print(sum)
sum=0
for x in range(1,101):
if x%2==0:
sum+=x
print(sum)
for i in range(1,10):
for j in range(1,i+1):
print(’%d*%d=%d’%(i,j,i*j),end=’\t’)
print()
from math import sqrt
num=int(input(‘请输入一个正整数:’))
end=int(sqrt(num))
is_prime=True
for x in range(2,end+1):
if num%x==0:
is_prime=False
break
if is_prime and num!=1:
print(’%d是素数’%num)
else:
print(’%d不是素数’%num)
x=int(input(‘x=’))
y=int(input(‘y=’))
if x>y:
(x,y)=(y,x)
for factor in range(x,0,-1):
if x%factor0 and y%factor0:
print(’%d和%d的最大公约数是:%d’%(x,y,factor))
print(’%d和%d的最小公倍数是%d’%(x,y,x*y//factor))
Break
row=int(input(‘请输入行数:’))
for i in range(row):
for _ in range(i+1):
print(’*’,end=’’)
print()
for i in range(row):
for j in range(row):
if j
else:
print(’*’,end=’ ')
print()
for i in range(row):
for _ in range(row-i-1):
print(’ ‘,end=’’)
for _ in range(2i+1):
print(’’,end=’’)
print()
for x in range(0,20):
for y in range(0,33):
z=100-x-y
if 5x+3y+z/3==100:
print('公鸡:%d只,母鸡:%d只,小鸡:%d只’%(x,y,z))
from random import randint
money=1000
while money>0:
print(‘你的总资产为:’,money)
needs_go_on=flase
while True:
debt=int(input(‘请下注:’))
if debt>0 and debt<=money:
break
first=randint(1,6)+randint(1,6)
print(‘玩家摇出了%d点’%first)
if first7 or first1:
print(‘玩家生’)
else:
needs_go_on=True
while needs_go_on:
current=randint(1,6)+randint(1,6)
print('玩家摇出了%d点'%current)
if current==7:
print('庄家生')
money-=debt
needs_go_on=flase
else current==first:
print('玩家生')
moeny+=debt
needs_go_on=False
print(‘你破产了,游戏结束’)
a=0
b=1
for _ in range(20):
(a,b)=(b,a+b)
print(a,end=’’)
for num in range(100,1000):
low=num%10
mid=num//10%10
high=num//100
if num==low3+mid3+high**3:
print(num)
num=int(input(‘请输入一个正整数:’))
temp=num
num2=0
while temp>0:
num2*=10
num2+=temp%10
temp//=10
if num==num2:
print(’%d是回文数’%num)
else:
print(’%d不是回文数’%num)
def factorial(n):
result=1
for num in range(1,n+1):
result*=num
return result
print(factorial(7)//factorial(4)//factorial(4))
from future import print_function
import os, sys
from PIL import Image
from PIL import ImageFilter
from PIL import ImageEnhance
from PIL import PSDraw
im=Image.open(‘1.jpg’)
for infile in sys.argv[1:]:
f,e=os.path.splitext(outfile)
outfile=f+".png"
if infile!=outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print(“cannot convert”,infile)
from PIL import Image
im=Image.open(‘cat.jpg’)
w,h=im.size
im.thumbnail((w//2,h//2))
im.save(‘cat.jpg’,‘JPEG’)
from PIL import Image,ImageFilter
im=Image.open(‘cat.jpg’)
im2=im.filter(ImageFilter.BLUR)
im2.save(‘cat2.jpg’,‘JPEG’)