一、python基础数据类型及循环
在Python中数据类型主要包括:
字符串、整数、浮点、None、变量、布尔变量、list、tuple、dict、set
1:list列表:
a = ['a',1,'2','Bob']
每一个列表中的元素对应位置索引为[0,1,2,3]
列表的操作方法:
1、增加到末尾: a.append()
2、插入指定位置 :a.insert(1,'hello')
3、删除末尾 :a.pop()
4、删除某位置 : a.pop(i)
5、说改某个元素或者替换: a[i] = ['aim']
2:tuple元组
元组的定义方式:
a = (1,2,'3','b','bob')
元组的操作方法跟list一致
元组的特性:
1、元组不能被改变
2、定义空元组:a = ()
3、定义单一元素的元组: a = ('a',)
3:set集合
元组定义方式:
s = {'abc','def'}
ss = set('abc','def')
set按value的方式储存,没有key,所以set中的元素不能重复,适用于存储不重复元素
set的操作方法:
1:增加到set中 s.add()
2:删除值 s.remove('abc')
3:并集 s | ss
4:交集 s & ss
4:dict字典:
定义方式:
d = {'a':1,'b':2,'c':3}
操作方法:
1: 迭代所有的key:print(d.keys())
2: 迭代所有的values: print(d.values())
3: 获取所有的元素:print(d.items())
4: 向字典中增加元素:d['d']=4
5: 查询字典中是否有某元素: d.get('a',1)#在的话返回'1' 或者 用in方法 f in d 返回布尔值
6: 改某个元素或者替换 d['a'] = 10
7: 删除某一个元素 d.pop('a')
字典具有存储速度快,但是占用磁盘空间多,和list一样用的比较多。
5:条件判断
(1): 年龄计算小程序:
a = int(input('输入你的年龄'))
if a >= 40:
print('老年人')
elif a >=18:
print('成年人')
else:
print('小孩子')
运行结果:
输入你的年龄:23
你是成年人
进程已结束,退出代码0
(2):网吧充值系统:
print('★★★★★欢迎光临把把吃鸡网吧★★★★★\n')
age = int(input("欢迎来到本网咖,请输入你的出生年份?"))
if age <= 2000:
vip = input("欢迎来到本网咖,请问你是否是会员?")#是 或者 不是
if vip == "是"or vip == "yes":
money = int(input("请输入本次充值金额:"))
time = money/25
print("你的余额可供上网时长为%d小时(25元每小时)"%time)
elif vip == "不"or vip =="no":
new_money=int(input("请输入本次充值金额:"))
new_time=new_money/50
print("你的余额可供上网时间时长为%d小时(25元没小时)"%new_time)
else :
print("输入错误")
elif age > 2000:
print("未成年")
else:
print("输入错误")
运行结果:
★★★★★欢迎光临把把吃鸡网吧★★★★★
欢迎来到本网咖,请输入你的出生年份?1995
欢迎来到本网咖,请问你是否是会员?yes
请输入本次充值金额:199
你的余额可供上网时长为7小时(25元每小时)
进程已结束,退出代码0
6:whlie循环判断
(1): 计算1-100的和
a = 100
s = 1
sum = 0
while s <= 100:
sum = sum + s
s = s + 1
print(sum)
运行结果:
5050
进程已结束,退出代码0
(2): while和set筛选奇偶数
numbers = [1,23,45,32,345,223,1,2,3,443,223,222,444,55,2,1]
jishu = set()#使用集合,剔除重复数字
oushu = set()
while len(numbers)>0:
number = numbers.pop()#将列表中的数字依次丢进if中处理
if number % 2 ==0:
oushu.add(number) #将筛选后数字的放到集合内
else:
jishu.add(number)
print('筛选后的奇数集合',jishu)
print('筛选后的偶数集合',oushu)
运行结果:
筛选后的奇数集合 {1, 3, 45, 23, 55, 345, 443, 223}
筛选后的偶数集合 {32, 2, 444, 222}
进程已结束,退出代码0
(3): 斐波那契数列:
a,b = 0,1
s = 0
while s < 10:
s = s + 1
print(b)
a, b = b, a+b
运行结果:
1
1
2
3
5
8
13
21
34
55
进程已结束,退出代码0
7:for循环
(1): for循环计算1-100的和
sum = 0
for x in range(101):
sum = sum + x
print(sum)
运行结果:
5050
进程已结束,退出代码0
二、 函数
1: 定义函数
def my_abs(x):
if x >= 0:
return x
else:
return -x
2: 函数的参数
(1): 位置参数
写一个计算x的n次方的函数:
def power2(x,n):
s = 1
while n > 0:
s = s * x
n = n - 1
return s
print(power2(2,3))
运行结果:
8
进程已结束,退出代码0
(2): 默认参数
位置参数虽然好用,但不能默认定义
def power3(x,n=3):
s = 1
while n > 0:
s = s * x
n = n - 1
return s
print(power3(2)) #默认的3次方不用传入
print(power3(2,4))
默认参数虽然好用但是最好不要指向可变参数,如list、字符串等变量。
运行结果:
8
16
进程已结束,退出代码0
(3):可变参数
可以不限不传入多少个参数,解决参数过多不够灵活的问题,通过“*”符号定义一个可变参数
定义一个计算和的函数
def sum1(*numbers):
sum = 0
for x in numbers:
sum = sum + x
return sum
print(sum1(1,2,3,4,5,6,7,8,9,10))
#或者直接将元素变成可变参数
s1 = (1,2,3,4,5,6,7,8,9)
print(sum1(*s1))
运行结果:
55
45
进程已结束,退出代码0
(4):关键字参数
除了可以用可变参数不受限制传入list 和tuple,还可以用**kw传入可关键字参数传入dict
定义:
def stulist(name,age,score,**kw):
print (name, age,score, kw)
stulist('xiaoming','18','100',dengji='A')
运行结果:
xiaoming 18 100 {'dengji': 'A'}
进程已结束,退出代码0
关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。
试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
(5): 命名关键字参数
关键字参数虽然可以传入不收限制的参数,但是如果传入的都是无用的参数,那怎么办?这就需要对传入的参数进行检查,
def stulist(name,age,score,*args,city,sex):
print (name, age,score, city,sex)
stulist('xiaoming','18','100',city='beijing',sex= 'man')
运行结果:
xiaoming 18 100 beijing man
进程已结束,退出代码0
3: 函数参数的组合顺序
在python中函数参数的组合顺序为:位置参数,默认参数,可变参数,命名关键字参数(如:args),关键字参数(如:*kw)
(1): 位置参数,默认参数,可变参数
def zuhe(a,b,c=0,*args):
print('a =',a,'b =',b,'c =',c,'args =',args)
zuhe(1,2,3,4,5)
运行结果:
a = 1 b = 2 c = 3 args = (4, 5)
进程已结束,退出代码0
(2): 位置参数,默认参数,可变参数,命名关键字参数,关键字参数
def zuhe(a,b,c=0,*,d,e,**kw):
print('a =',a,'b =',b,'c =',c,'d =',d,'e =',e,'other =',kw)
zuhe(1,2,3,d=4,e=5,g=6,h=7)
运行结果:
a = 1 b = 2 c = 3 d = 4 e = 5 other = {'g': 6, 'h': 7}
进程已结束,退出代码0
(3): 位置参数,默认参数,可变参数,命名关键字参数,关键字参数
传入参数的位置不影响命名关键字参数的检查
def zuhe(a,b,c=0,*de,d,e,**kw):
print('a =',a,'b =',b,'c =',c,'d =',d,'e =',e,'other =',kw)
zuhe(1,2,3,d=4,dd=45,e=5,g=6,h=7)
运行结果:
a = 1 b = 2 c = 3 d = 4 e = 5 other = {'dd': 45, 'g': 6, 'h': 7}
进程已结束,退出代码0
4:调用函数本身的函数叫递归函数
如:阶乘函数
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
print(fact(4))
运行结果:
24
进程已结束,退出代码0
三、python变量的高级特性
1: 切片
格式: 变量名[起始索引:终止索引:间隔几位]
L[1:3:2]
如取list的部分元素
L = ['a','b','c']
L[0]
L[101]
L[1:2]
L[-1]
等于:a,ab,bc,c
2: 迭代
可以对元组、列表、字符串等操作,将list、tuple、str,dict用for循环遍历出来就叫迭代。
是否可以迭代可以通过isinstance函数判断:
isinstance('对象',Iterable)
迭代格式:
for x in 'abcdef':
print x
(1):迭代dict:
d = {'a':1,'b':2,'c':3,'d':4}
for x in d.values():
print(x)
运行结果:
1
2
3
4
进程已结束,退出代码0
迭代方式:values,items,keys 参照上边的dict操作方法。
用for in 遍历 字符串,list,dict,tuple
(2):遍历字符串
a = 'abcdef'
for s in a :
print(s)
(3):遍历字典
d = {'a':1,'b':2,'c':3}
for k,v in d.items():
print(k,v)
运行结果:
a 1
b 2
c 3
进程已结束,退出代码0
(4):遍历列表,并带索引
L = ['a','b','c']
for k,v in enumerate(L):
print(k,v)
(5): 更简洁的迭代dict
d = {'x':'A','y':'B','z':'C'}
print([k + '=' + v for k,v in d.items()])
3: 列表生成式
(1): 用一行语句生成100以内的奇数列表
print(list(range(1,100,2)))
运行结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
进程已结束,退出代码0
(2): 生成x * x
print([x*x for x in range(1,11)])
运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
进程已结束,退出代码0
4: 生成器
(1):将生成式的"[]"替换成“()",整个列表生成式就变成了生成器:generator对象,是惰性的,可以用next生成出来。
g = (x*x for x in range(1,11))
print(type(g))
print(next(g))
print(next(g))
运行结果:
<class 'generator'>
1
4
进程已结束,退出代码0
(2):既可以用next()可以一个一个的生成出来,也可以用for循环迭代出来。
g = (x*x for x in range(1,11))
print(type(g))
for x in g:
print(x)
运行结果:
<class 'generator'>
1
4
9
16
25
36
49
64
81
100
进程已结束,退出代码0
5: 迭代器
能直接作用于for循环的叫可迭代对象。
第一类:str、list、tuple、dict、set。
第二类:生成器类:genrator和带yield的genrator函数