Python基本操作2

Python操作2 ------语句和表达式

1、Python代码风格

python代码风格:pep8、缩进4空格、一行不超过79个字符、两个函数之间空两行。

2、Python语句

赋值语句

简单的赋值语句:
简单变量赋值:

>>> a =3
>>> b =5
>>> a 
3
>>> b
5
>>>

元组赋值:

#元组的赋值
>>> (x,y) = (3,5)
>>> (x,y)
(3, 5)
#元组的赋值可以省略括号
>>> x,y = 3,5
>>> x,y
(3, 5)

列表的赋值:

>>> [x,y,z] = [10,20,30]
>>> [x,y,z]
[10, 20, 30]

此外Python可以很方便的交换两个变量的值

>>> x = 20
>>> y = 50
>>> x,y = y,x
>>> x
50
>>> y
20

多目标赋值

#一个字符串赋值给同样长度的变量,是按位赋值,如下:
>>> a,b,c = 'bye'
>>> a 
'b'
>>> b
'y'
>>> c 
'e'

如果字符串的长度大于变量的个数可以采取以下方式赋值:

#方法一
>>> s = 'helloworld'
>>> a = s[0]
>>> b = s[1]
>>> c = s[2:]
>>> a 
'h'
>>> b 
'e'
>>> c 
'lloworld'


#方法二
>>> a , b, *c = 'hellworld'  # *变量名是将剩余对像以列表的形式赋值给该变量
>>> a 
'h'
>>> b
'e'
>>> c 
['l', 'l', 'w', 'o', 'r', 'l', 'd']

#同样的也可以将剩余变量赋值给b
>>> a,*b,c = 'helloworld'
>>>> a
'h'
>>> b 
['e', 'l', 'l', 'o', 'w', 'o', 'r', 'l']
>>> b = ''.join(b)  # 将列表变量转换成字符串变量
>>> b 
'elloworl'
>>> c 
'd'
#如果变量个数多于字符串长度,则将最后变量赋值为空列表
>>> a,b,c,*d = 'bye'
>>> a 
'b'
>>> b 
'y'
>>> c 
'e'
>>> d 
[]

判断两个变量的值和内存地址是否相同

#判断值是否相同
>>> a = 'hello'
>>> b = 'hello'
>>> a == b 
True
#判断a,b的指向的内存地址是否相同
>>> a is b 
True


#如果对象简单,则Python一开始就定义了,所以两个不同的变量指向的内存地址相同
#如果对象复杂,两个不同的变量指向的内存地址则不同
>>> a = 'helloworld.com'
>>> b = 'helloworld.com'
>>> a == b #判断值是否相同
True
>>> a is b #判断变量指向的内存地址是否相同
False

参数化赋值

>>> a = 5
>>> b = 10 
>>> b += a 
>>> b 
15

#列表  相当于列表的扩展
>>> l = [1,2]
>>> l += [9,0]
>>> l
[1, 2, 9, 0]

#用extend()函数实现列表的扩展
>>> l.extend([2,3,4])
>>> l 
[1, 2, 9, 0, 2, 3, 4]
>>> 

2、表达式

Python表达式分为:
1、函数的调用。如:len()函数的使用
2、方法的使用。如:l.append()方法的使用
3、字面值
4、打印操作 print(参数1,参数2,参数…,sep = ’ ',end = ’ ',file = open(‘文件路径.文件名称’,‘操作’,encoding = ’ '))
(sep为分割符,end为结束符,file为输出到文件,encoding 是编码方式)

流程控制

if条件句

一般格式如下:

#if 语句的一般格式
score = 75
if score>= 60:
    print('及格')
else:
    print('不及格')

及格

多条件句:

#多条件句
score = 86
if score >=90:
    print('优秀')
elif score>= 80:
    print('良好')
elif score >=60:
    print('及格')
else:
    print('不及格')

良好

多重分支

#多重分支  类似于其他编程语言的 case
operation = {'add':'添加操作','update':'更新','del':'删除操作' }
print(operation.get('del'))
删除操作



#Python中用字典表的方式弥补了其在多重分支语句上的不足,
#同时字典表中也可以用函数来表示键的值,例如:

#定义加法函数
def add(x):
    print(x+10)
    
#定义字典表
op = {'add':add,'update':lambda x :print(x**2),'del':lambda x:print(x*3)}  #字典表中 键'add'的值为事先定义的add函数,'update'的值为lambda表达式。lambda表达式的一般格式  :lambda  参数1,参数2... : 程序操作  (lambda表达式的本质就是定义了一个没有函数名的函数)

def defoult_method(x):
    print('默认方法,什么都不做')

#字典表的get(参数1,参数2)方法中的参数2 是我们指定的默认值,意思就是如果参数1代表的键在字典表中找不到的话,默认返回我们指定的默认值。
op.get('add',defoult_method)(10)   #10是参数
op.get('update',defoult_method)(10)
op.get('del',defoult_method)(10)
op.get('print',defoult_method)(10)
20
100
30
默认方法,什么都不做

Python三元运算符
在其他编程语言中三元运算符 表示方式是 条件?x:y 意思就是条件满足执行x,条件不满足执行y
而在python中表示方式是这样的 条件满足 if 条件 else 条件不满足 例如:

#三元运算符
score = 76
print('及格') if score>= 60 else print('不及格')

循环

1、while循环:

while True:
    name = input('请输入您的姓名:')  #input()函数用于让用户在键盘上输入
    if name == 'stop':
        break  # break 用于跳出整个循环
#运行结果如下:
请输入您的姓名:hello现生
请输入您的姓名:hello先生
请输入您的姓名:stop
x = 10 
while x :  #当x自减为0时 条件变为假,类的假条件还有空的字符串,空列表等
    x -=1
    if x%2 == 0:
        print(x)
        continue  # continue 用于跳出本次循环,直接进行下次循环

#运行结果如下:
8
6
4
2
0

for 循环
for循环多用于遍历数组,列表等可迭代对象
for循环的一般格式: for 临时变量 in 目标序列(可迭代对象,字符串,元组等)

for x in range(1,7):
    if x == 6:
        print('有这个数字',x)
        continue
    else:
        print('没有找到这个数字')
#运行结果如下:
没有找到这个数字
没有找到这个数字
没有找到这个数字
没有找到这个数字
没有找到这个数字
有这个数字 6

#目标序列是列表
x = [1,2,3,4,5]
for i in x:
    print(i,end = ',')
#运行结果如下:
 1,2,3,4,5,


#目标序列是元组
x = (1,2,3,4,5)
for i in x:
    print(i,end = '|')
#运行结果如下:
1|2|3|4|5|

for 循环可以用来取两个序列的交集

s1 = 'abcdefghigk'
s2 = 'helloworld'
result= []
for x in s1:
    if x in s2:  #判断s1中元素是否在s2中出现
        result.append(x)
print(result)
#运行结果如下:
['d', 'e', 'h']

#同样的,我可以采用推导的方式来解决这个问题
s1 = 'abcdefghigk'
s2 = 'helloworld'
result= [x for x in s1 if x in s2]
运行结果同上

enumerate()函数返回值有两个,第一个是每个元素的序号,第二个是每个元素的值。

s = 'abcdefg'
for index,value in enumerate(s):
    print('下标:{},值:{}'.format(index,value))

#其运行结果如下:
下标:0,值:a
下标:1,值:b
下标:2,值:c
下标:3,值:d
下标:4,值:e
下标:5,值:f
下标:6,值:g


#遍历对象是列表
s = [1,2,3,4,5,6,7,8,9]
for index, value in enumerate(s):
    print('下标:{},值:{}'.format(index,value))
#运行结果如下
下标:0,值:1
下标:1,值:2
下标:2,值:3
下标:3,值:4
下标:4,值:5
下标:5,值:6
下标:6,值:7
下标:7,值:8
下标:8,值:9

可迭代对象和迭代器对象

迭代器对象内置 __next()__函数,用来移动指针到下一个对象。

#例如文件对象就是迭代器对象,所以是可迭代对象。
#写文件
with open('hellwoword.txt','w',) as f:
    f.write('helloworld\n')
    f.write('你好世界\n')
#读文件
f = open('hellwoword.txt','r')
a = f.__next__()  #第一次读 文件指针在第一行
b = f.__next__()  #第二次读  文件指针在第二行
#a = next(f)  全局的next()函数
#b = next(f)
print(a,b)
运行结果如下:
helloworld
 你好世界

#同样的文件也可以用for循环来遍历
f = open('hellwoword.txt','r')
for line in f:
    print(line)
#运行结果如下:
helloworld

你好世界

字符串、元组、列表等属于可迭代对象而不属于可迭代器
所以字符串、元组、列表中并没有next()函数,我们可用通过全局的iter()函数来判断其是否为迭代器对象

s = 'abcdefghijk'
iter(s) is s  #全局函数iter()用于判断对象是否是迭代器对象,如果是返回True,如果不是返回Flase
s.__next__()
#运行会报错:
False
'str' object has no attribute '__next__'
 
lis = [1,2,3,4,5,6]
iter(lis) is lis
lis.__next__()
#运行也会报错
False
'list' object has no attribute '__next__'

我们也可以用iter()函数使该对象变为迭代器对象。

lis = [1,2,3,4,5]
li = iter(lis)
li.__next__()
#运行结果如下:
1

for 循环、推导、map()函数都可以在运行的过程中给可迭代对象加上___next__()函数使其变为迭代器对象

我们可以用迭代器对象做一些事情,比如:

lis = [1,2,3,4,5]
i = iter(lis)
res = []
x = 0
while True:
    res.append(next(i)**2)  #全局的next()函数用于移动指针到下一个位置,与可迭代对象内的__next__()函数相同
    x +=1
    if x ==5:
        break
res
#运行结果如下:
[1, 4, 9, 16, 25]

map()函数

def double_number(x):
    return x*2
l = [1,2,3,4,5]
result = list(map(double_number,l))  #map(参数1,参数2)函数:是将可迭代对象依次拿到方法中去运算,参数1 是方法名,参数2 可迭代对象
print(result) 
#运行结果如下:
[2, 4, 6, 8, 10]

类似的方法还有filter()函数

def evn_number(x):
    return x%2==0

l = list(range(1,11))
result = list(filter(evn_number,l))  #filter函数相当于一个过滤器,其参数和map函数一样
result
#运行结果如下:
[2, 4, 6, 8, 10]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值