6.5.6.2 import的使用
6.2.1import语句
import标准语法:
import module1[,module2[,...moduleN]]
表示允许一个import导入多个模块,但各个模块需要用逗号隔开。
6.2.2使用逗号输出
原来:
student='小智'
print('学生称呼:',student)
结果:
学生称呼: 小智
还可以这样:
greeting='大家好!'
intriduce='我叫小智,'
comefrom='我来自智慧城市。'
print(greeting,intriduce,comefrom)
结果:
大家好! 我叫小智, 我来自智慧城市。
所以,不使用格式化的方式可以同时输出文本和变量值。
6.3别样的赋值
6.3.1序列解包(交换要做的事情叫做序列解包)
1.可以多个赋值操作同时进行。
x,y,z=1,2,3
print(x,y,z)
结果:
1 2 3
2.后面再遇到对多个变量赋值时,就不需要对一个变量赋完值再对另一个变量赋值了,用一条语句就能搞定。
x,y,z=1,2,3
x,y=y,x
print(x,y,z)
结果:
2 1 3
3.序列解包就是交换要做的事情,即将多个值的序列解开,然后放到变量序列中。
例子1:序列解包后,变量获得了对应的值。
nums=1,2,3
print(nums)
x,y,z=nums
print(x)
print(x,y,z)
结果;
(1, 2, 3)
1
1 2 3
例子2:
student={'name':'小萌','number':'1001'}
key,value=student.popitem()
print(key)
print(value)
结果:
number
1001
此处作用于元组,使用popitem方法将键值作为元组返回,返回的元组可以直接赋值到两个变量中。但注意,解包序列中的元素变量必须和放置在赋值符号”=“左边的数量完全一致,否则引发异常。
例子:
x,y,z=1,2
print(x,y,z)
结果:
Traceback (most recent call last):
File "D:/pycharm/1.2.py", line 70, in <module>
x,y,z=1,2
ValueError: not enough values to unpack (expected 3, got 2)
6.3.2链式赋值(更简洁)
例子: 通过多个等式为多个变量赋同一个值。
x=y=z=10
print(x)
print(y)
结果:
10
10
6.3.3 增量赋值
例子;(数值类型适用)
x=5
x+=1
print(x)
y=7
y-=2
print(y)
z=2
z*=2
print(z)
a=8
a/=4
print(a)
结果:
6
5
4
2.0
例子2:(增量赋值操作也可以用于字符串)
field='hello,'
field+='world!'
print(field)
field*=2
print(field)
结果:
hello,world!
hello,world!hello,world!
6.4语句块(是一组满足一定条件时执行一次或多次的语句。
创建方式:在代码前放置空格缩进。要保持同样的缩进。
冒号:用来标识语句块的开始。
6.5条件语句
6.5.1布尔变量的作用
例如第二章false,true是布尔变量,布尔变量一般对应布尔值(也称作真值)
6.5.2 if语句
真值可以联合使用。
greeting='hello'
if greeting == 'hello':
print('hello')
结果:
hello
#! /user/bin/python3
#-*- coding:utf-8 -*-
greeting='hello'
if greeting == 'hello':
student={'小萌':'1001','小智':'1002','小强':'1005','小张':'1006'}
print(f'字典元素个数为:{len(student)}')
student.clear()
print(f'字典删除后元素个数为:{len(student)}')
字典元素个数为:4
字典删除后元素个数为:0
6.5.3else语句
else子句后没有条件判定。
#! /user/bin/python3
#-*- coding:utf-8 -*-
greeting='hi'
if greeting == 'hello':
print('hello')
else:
print('该语句块不在if中,greeting的值不是hello')
结果;
该语句块不在if中,greeting的值不是hello
6.5.4 elif子句
elif是else if的简写,意思为具有条件的else子句。
如果除了if条件外,还有多个子条件需要判定,就用elif。
#! /user/bin/python3
#-*- coding:utf-8 -*-
num = 10
if num>10:
print('num的值大于10')
elif 0<=num<=10:
print('num的值介于0和10之间')
else:
print('num的值小于0')
num的值介于0和10之间
注:elif 需要和if,else子句联合使用,不能独立使用,并且必须以if子句开头,可以选择是否以else子句结尾。
6.5.5 嵌套代码块
(更复杂的if else语句,嵌套语句)
#! /user/bin/python3
#-*- coding:utf-8 -*-
num = 10
if num%2==0:
if num%3==0:
print("你输入的数字可以整除2和3")
elif num%4==0:
print("你输入的数字可以整除4和2")
else:
print("你输入的数字可以整除2,但不能整除3和4")
else:
if num%3==0:
print("你输入的数字可以整除3,但不能整除2")
else:
print("你输入的数字既不能整除2,也不能整除3")
你输入的数字可以整除2,但不能整除3和4
6.5.6 更多操作
1.is:同一性运算符
先看例子:
x=y=[1,2,3]
z=[1,2,3]
print(x==y)
print(x==z)
print(x is y)
print(x is z)
结果:
True
True
True
False
为什么x和z相等却不相同呢?
这是因为is运算符用于判定同一性而不是相等性。x和z的值相等,但是却不是同一对象。
或者也可以从内存角度,他们所指向的内存空间不一样,x和y是指向同一空间,y指向另一块空间。
例子2;
x=[1,2,3]
y=[1,5]
print(x is not y)
del x[2]
print(x)
y[1]=2
print(y)
print(x==y)
print(x is y)
True
[1, 2]
[1, 2]
True
False
综上:==用来判断两个值是否相等,is用来判断两个对象是否等同,是否指向同一空间。
不过还是尽量避免使用is比较数值和运算符这类不可变值。
2.比较字符串和序列
①其他序列比较的是元素的其他类型,而不是字符。
print([1,2]<[1,2])
false
print([1,2]<[2,1])
true
也可以对嵌套列表进行比较操作:
print([2,[1,2]]<[2,[1,3]])
结果:
True
3.布尔运算符(逻辑运算符)
and运算符可用于连接两个布尔值,并在两者都为真时返回真,否则返回假。与and同类的还有or和not两个运算符。
6.5.7 断言
assert断言:①用来声明某个条件是真的
②assert语句失败时,会引发一个assertionerror。
6.6 循环
6.6.1 while循环
语法: while 判断条件:
执行语句······
注:执行语句可以是单个语句,或者语句块;判断条件可以是任何表达式,所有非零,非空的值都为真,当判断条件为假时,循环结束。
6.6.2 for循环
先看例子:使用while:
#! /user/bin/python3
#-*- coding:utf-8 -*-
n=0
fields=['a','b','c']
while n<len(fields):
print(f'当前字母是:{fields[n]}')
n+=1
结果:
当前字母是:a
当前字母是:b
当前字母是:c
使用for循环:
#! /user/bin/python3
#-*- coding:utf-8 -*-
fields=['a','b','c']
for f in fields:
print(f'当前字母是:{f}')
结果:
当前字母是:a
当前字母是:b
当前字母是:c
语法:
for 需要遍历的元素 in 需要遍历的序列:
待执行语句块
#! /user/bin/python3
#-*- coding:utf-8 -*-
print('-------for循环字符串-------')
for letter in 'good':
print(f'当前字母:{letter}')
结果:
-------for循环字符串-------
当前字母:g
当前字母:o
当前字母:o
当前字母:d
#! /user/bin/python3
#-*- coding:utf-8 -*-
print('-------for循环数字序列-------')
number=[1,2,3]
for num in number:
print(f'当前字母:{num}')
结果:
-------for循环数字序列-------
当前字母:1
当前字母:2
当前字母:3
#! /user/bin/python3
#-*- coding:utf-8 -*-
print('-------for循环字典-------')
tups={'name':'小智','number':'1001'}
for tup in tups:
print(f'{tup}:{tups[tup]}')
结果:
-------for循环字典-------
name:小智
number:1001
注:能用for尽量用for,for比while好用。
6.6.3 循环遍历字典元素
#! /user/bin/python3 #-*- coding:utf-8 -*- print('-------for循环字典-------') tups={'name':'小智','number':'1001'} for tup in tups: print(f'{tup}:{tups[tup]}')
这样看起来有点麻烦,怎样更简单呢?
序列解包!
在循环中使用序列解包!
tups={'name':'小智','number':'1001'}
for key,value in tups.items() :
print(f'{key}:{value}')
结果:
name:小智
number:1001
使用items方法将键-值对作为元组返回。
6.6.4 迭代工具
1.并行迭代 (同时迭代两个序列。)
#! /user/bin/python3
#-*- coding:utf-8 -*-
student=['xiaoming','xiaozhi','xiaoqi']
number=[1001,1002,1003]
for i in range(len(student)):
print(f'{student[i]}的学号是:{number[i]}')
结果:
xiaoming的学号是:1001
xiaozhi的学号是:1002
xiaoqi的学号是:1003
注:i 是循环索引的标准变量名。
在python中,内建的函数zip函数用来进行并行迭代,可以把两个序列合并在一起,返回一个元组的列表,例如:
student=['xiaoming','xiaohua','xiaoqi']
number=[1003,1004,1005]
for name,num in zip(student,number):
print(f'{name}的学号是:{num}')
结果:
xiaoming的学号是:1003
xiaohua的学号是:1004
xiaoqi的学号是:1005
zip函数可以作用于任意数量的序列,并且可以应付不等长的序列,当短序列”用完“就停止。
a=[1,2,3,4,5,6,7]
b=[1,2,3,4]
for a,b in zip(a,b):
print(f'zip的键值对为:{a} {b}')
结果;
zip的键值对为:1 1
zip的键值对为:2 2
zip的键值对为:3 3
zip的键值对为:4 4
for num1,num2 in zip(range(3),range(100)):
print(f'zip的键值对为:{num1} {num2}')
jieguo:
zip的键值对为:0 0
zip的键值对为:1 1
zip的键值对为:2 2
6.6.5 跳出循环
1.break
终止循环语句,用在while和for循环中。
当遇到break语句时,无论执行什么条件,都跳出这个循环。
for letter in 'hello':
if letter =='l':
break
print(f'当前字母为:{letter}')
结果:
当前字母为:h
当前字母为:e
num=10
while num > 0:
print(f'输出数字为:{num}')
num -= 1
if num == 8:
break
结果:
输出数字为:10
输出数字为:9
2.continue 语句
跳过该轮循环的剩余语句,然后进行下一轮循环。
也用在while和for中。
for letter in 'hello':
if letter == 'l':
continue
print(f'当前字母为:{letter}')
结果:
当前字母为:h
当前字母为:e
当前字母为:o
num = 10
while num > 6:
num -= 1
if num == 6:
continue
print(f'当前变量值为:{num}')
结果:
当前变量值为:9
当前变量值为:8
当前变量值为:7
6.6.6 循环中的else子句
1.在while循环中使用else语句
在while条件语句为false,执行else语句块。
num=0
while num < 3:
print(f'{num}小于3')
num+=1
else:
print(f'{num}等于或者大于3')
print('结束循环')
结果:
0小于3
1小于3
2小于3
3等于或者大于3
结束循环
2.在for循环中使用else语句
在for条件语句为false或结束后没有被break中断时,执行else语句块,
names=['xiaoqi','xiaotian']
for name in names:
if name == "xiao":
print(f'名称:{name}')
break
print(f'循环名称列表 {name}')
else:
print('没有循环数据!')
print('JIESHUXUNHUAN')
结果:
循环名称列表 xiaoqi
循环名称列表 xiaotian
没有循环数据!
JIESHUXUNHUAN
6.7 pass语句
python中的pass语句是空语句,作用是保持程序结构的完整性。