Python 基础(二)
原文链接:http://www.one2know.cn/python2/
- 输入一个字符串,以列表输出大写,如果包含整数,转为整型
str = input()
list = []
for i in str:
if i.isdecimal() == True:
list.append(int(i))
else:
list.append(i.upper())
- 判断字符的类型:字母,数字,空格
char.isalpha()
char.isdigit()
char.isspace()
- 两个矩阵相加
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[1,2,3],[4,5,6],[7,8,9]]
num = [m[i][j] + n[i][j] for i in range(3) for j in range(3)]
- 列表推导式
list = []
for i in range(3,10):
if i % 2 == 0:
list.append(i)
可简写成:
list = [i for i in range(3,10) if i % 2 == 0]
- 嵌套列表推导
m = [[1,2,3],
[4,5,6],
[7,8,9]]
list = []
for i in m:
for j in i:
list.append(j)
可简写成:
list = [j for i in m for j in i]
- 打印菱形
for i in range(1,8,2):
print(('*'*i).center(7))
for i in range(5,0,-2):
print(('*'*i).center(7))
- 判断回文数:当成
str
比较是否相同就行了,用数字麻烦
也可以使用切片,比较其与反切是否相等(num == num[::-1]
) - 四个数字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 * 100 + y * 10 + z)
用列表推导式:
num = [x*100+y*10+z for 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]
- 字典推导式
names = ['tom','jerry','jack']
name = {k:v for k,v in enumerate(names)}
print(name)
输出为:{0:'tom',1:'jerry',2:'jack'}
- 冒泡排序:将2,6,4,9,3,10从大到小排列
list = [2,6,4,9,3,10]
for i in range(len(list)-1):
for j in range(len(list)-1-i):
if list[j] < list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
print(list)
- 函数的定义
def function_name([参数](形参)):
#函数说明
要封装的代码块
function_name([参数(实参)]) #调用函数
- 可以将函数名赋值给另一个变量,相当于起个别名
- 函数的参数要一一对应,或者用关键字参数
def f(x,y):
print(x-y)
f(2,1)
f(y=1,x=2)
- 不定长参数
def getInfo(name,address,*args,**args2):
#*args 是接受所有未命名的参数(关键字)
#**args2 是接受所有命名的参数(带关键字的)
print('我叫%s,来自%s'%(name,address))
print(args) #元组类型
print(args2) #字典类型
getInfo('tom','china','a','b','c',age = 18)
输出:
我叫tom,来自china
('a','b','c')
{'age' : 18}
- 可变参数与不可变参数
def fun(*args):
args = hello
print(args)
str = 'baby'
fun(str1) #输出hello
print(str1) #输出baby,因为string是不可变类型,若为可变类型(如list),则参数也会被修改
return
之后的代码不会执行,例如
def sum(x,y):
return x+y #将结果回到调用的位置上
print(x+y) #不会执行
print(sum(1,2))
yield
生成器,生成一个迭代器
def getNum(n):
i = 0
while i <= n:
#print(i) #打印i
#return i #返回第一个i(即0),结束函数的运行
b = yield i #将函数变成一个generator,直接在yield处暂停了,没有赋值操作
i += 1
#getNum(5)
print(getNum(5))
a = getNum(5)
for i in a:
print(i)
a = [ x for x in range(100000)]
会占用很大内存
a = (x for x in range(100000))
生成迭代器,用next(a)
一次输出一个数据- 迭代器:能被
next()
不断调用返回下一个对象
可迭代对象:list string dict
≠ 迭代器
list = [1,2,3,4]
a = iter(list)
print(a)
print(next(a))
isinstance(s,str)
判断数据类型,相当于type(s) == str
- 变量的作用域
局部变量:声明在函数内部的是局部变量,外部无法使用
全局变量:大家都能使用 - 修改全局变量:
对于不可变类型:在函数内用global
修改为全局变量
对于可变类型::可以不使用global
声明
def fun1():
global a
a = 1
print(a)
def fun2():
global a
a = 2
print(a)
a = 3
fun1()
fun2()
print(a)
输出为:
1
2
2
- 递归函数
def main(n):
print(n)
if n == 3:
print('start')
else:
main(n+1)
print(n)
main(1)
输出:
1
2
3
'start'
3
2
1
分析:
main(1)=print(1)+main(2)+print(1)=print(1)+print(2)+main(3)+print(2)+print(1)=print(1)+print(2)+print(3)+print('start')+print(3)+print(2)+print(1)
- 匿名函数:
lambda [参数](可有可无): 表达式(相当于return xx)
lambda
内部一般只能放简单的表达式,特殊地,s = lambda x,y : x if x > y else y
没有参数:s = lambda : 'abc'
;print(s())
一个参数:s = lambda x : x*2
;print(s(3))
多个参数:s = lambda x,y : x+y
;print(s(1,2))