Python3.5笔记
第六章 条件、循环和其他语句
import语句的使用
格式1:直接导入
import modelname
示例:
import math
r=5
print(math.pi)
print("半径是5的圆的面积是:%.2f"%(math.pi*r**2))
输出:
3.141592653589793
半径是5的圆的面积是:78.54
格式2:从modelA导入modelB
from modelname import sub_modelname
#另一种导入包的方式
from math import pi
r=5
print(pi)#这种导入方式,可以直接使用sub_modelname,而不必使用modelname
print("半径是5的圆的面积是:%.2f"%(pi*r**2))
工作原理
当我们使用import语句时,Python解释器如何找到对应的文件?
这涉及Python的搜索路径,搜索路径由一系列目录名组成,Python解释器会依次从这些目录中寻找引入的模块。
看起来很像环境变量,事实上可以通过定义环境变量的方式定义搜索路径,搜索路径是在Python编译或安装时确定的,
被存储在sys的path变量中。查看搜索路径的方式如下:
import sys
print(sys.path)
输出:
['D:\\pyspace\\hellopython', 'D:\\pyspace\\hellopython', 'D:\\Program Files\\Python\\python35.zip', 'D:\\Program Files\\Python\\DLLs', 'D:\\Program Files\\Python\\lib', 'D:\\Program Files\\Python', 'D:\\Program Files\\Python\\lib\\site-packages', 'D:\\Program Files\\JetBrains\\PyCharm 2018.1.4\\helpers\\pycharm_matplotlib_backend']
可以通过修改path变量改变搜索路径的位置。
导入多个模块
导入多个模块时,只需要将导入的多个模块中间用逗号,分隔开就可以了。如:
from math import pi,sin
导入全部
from math import *
起别名
可以对导入导入的模块起别名,直接在模块名后加as 别名即可。如:
from math import pi as p
print(p)
输出
3.141592653589793
使用逗号输出
可以使用逗号输出多个表达式,所以不使用格式化的方式也可以同时输出文本和变量值。如:
print("我是小智",",我来自未来")
name = "我是小智"
introduce = ",我是一名工程师"
comefrome = ",我来自未来"
print(name,introduce,comefrome)
输出:
我是小智 ,我来自未来
我是小智 ,我是一名工程师 ,我来自未来
花式赋值
序列解包
在Python中,交换所作的事情叫做序列解包,或可迭代解包。即将多个值的序列解开,然后放到变量的序列中。
通过序列解包,可以同时对多个变量赋值。如:
x,y,z = 1,2,3
print("x=",x)
print("y=",y)
print("z=",z)
print(x,y,z)
a,b,c = "a","b","c"
print(a,b,c)
student = {'name':"小明",'age':23}
#Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
#如果字典已经为空,却调用了此方法,就报出KeyError异常。
#返回一个键值对(key,value)形式。
key,value = student.popitem()
print(key)
print(value)
print(student)
输出:
x= 1
y= 2
z= 3
1 2 3
a b c
name
小明
{'age': 23}
需要注意的是,解包序列中的元素数量必须和放置在赋值符号"="左边的数量完全一致,否则Python会在赋值时引发异常。如:
x,y,z = 1,2
print(x,y,z)
输出
ValueError: not enough values to unpack (expected 3, got 2)
链式赋值
可以通过多个等式为多个变量赋同一个值,这种方法叫做链式赋值。
链式赋值是将同一个值赋给多个变量,但是要注意的是,当其中一个变量的值发生改变后,另外变量的值并不会自动随之改变,而是仍然保持原来的值不变。如:
x=y=z=123
print(x,y,z)
y=456
print(x,y,z)
输出
123 123 123
123 456 123
增量赋值
使用赋值运算符时,没有将表达式写成类似x=x+1的形式,而是将表达式放置在赋值运算符(=)的左边,如:将x=x+1写成
x+=1,这种写法在Python中称之为增量赋值。即先对变量进行"="左边的运算,然后再将运算完的结果赋给变量。如:
x=0
x+=1
print(x)
x*=10
print(x)
输出
1
10
增量赋值不仅使用于数字,同样适用于字符串,如:
str='hello'
str+=' world'
print(str)
str*=2
print(str)
输出
hello world
hello worldhello world
语句块
在Python中,冒号(:)用来标识语句块的开始,语句块中每一个语句都需要缩进(缩进量相同)。当退回到和已闭合的块一样的缩进量时,表示当前语句块已经结束了。如:
a=3
if a==3:
print('a==3')
print('这是一个语句块')
a=4#这时语句块已经结束了
输出:
a==3
这是一个语句块
Python中的布尔值
在Python中,标准的布尔值有:True,False。下面的值做为布尔表达式时,会被看作假。
False None () "" 0 [] {}
在Python中,除了标准值False和None、所有类型的数字0(包括浮点型,长整形和其他类型)、空序列(如:空字符串、空元组和空列表)以及空字典都为假。其他的值都为真,包括原生的布尔值True。
标准值False=0,True=1
print(True == 0)
print(True == 1)
print(False == 0)
print(False + True + 2)
print(False)
print(True)
输出:
False
True
True
3
False
True
bool()函数用来转换表达式为布尔值,如:
print(bool('abc'))
print(bool(0))
输出:
True
False
IF ELSE ELIF 语句的写法
在Python中,if语句后面不需要跟括号(),只需要跟空格,然后加条件表达式即可。else 语句不是独立语句,只能做为if语句的一部分。elif是else if的简写,在Python中,使用elif代替其他语句的else if。如:
#! /usr/bin/python3 #建议加上这一句,否则代码移植到linux时,会找不到解释器
# -*- coding:UTF-8 -*- #建议加上这一句,否则有中文时容易出现乱码
#greeting = 'hello'
greeting = 'hello1'
#greeting = 'hello2'
if greeting == 'hello':
print('hello的长度是:%d'%len(greeting))
elif greeting == 'hello1':
print('greeting变量的值是:%s'%greeting)
else:
print('字符串不等于hello')
输出:
#hello的长度是:5
greeting变量的值是:hello1
#字符串不等于hello
同一运算符 IS
IS运算符用来判断两个对象是否等同(是否为同一个对象),使用==运算符用来判断两个对象是否相等。如:
x=y=(1,2,3)
z=(1,2,3)
print(x is y)
print(x is z)
输出:
True
False
比较字符串和序列
字符串可以按照字母排序顺序进行比较,也可以对列表进行比较操作,也可以对嵌套列表进行比较操作。如:
print([1,2] < [2,1])
print([1,2] == [1,2])
输出:
True
True
assert 断言
在Python中,assert语句的格式如下:
if not condition:
crash program
为什么需要这样的代码呢?
在没有完善一个程序之前,你不知道程序会在哪里出错,与其在运行时崩溃,不如在遇到错误时崩溃。
使用assert,要注意以下几点:
1、assert断言用来声明某个条件是真的。
2、如果你非常确信,你使用的列表中至少有一个元素,想要检验这一点,并在它非真时引发一个错误,那么assert语句是应用在这种情形下的理想语句。
3、当assert语句失败时,会引发一个AssertionError。
x=3
#assert x<0,'x is not zero not negative'
assert x%2==0,'x不是偶数'
输出
assert x%2==0,'x不是偶数'
AssertionError: x不是偶数
几种循环的写法
while循环
while语句用于循环执行程序,以处理需要重复处理的任务。执行的流程为:当while条件为True时,执行循环体,直到while条件为False时,退出循环,基本语法形式如下:
while 判断条件:
执行语句
迭代器
示例:
x=0
while x<5:
print('x=',x)
x+=1
输出:
x= 0
x= 1
x= 2
x= 3
x= 4
for循环
for循环可以遍历任何序列的项目,如一个列表或字符串。for循环的语法格式如下:
for iterator_var in sequence
statements
sequence是任意序列,iterator_var是序列中要遍历的元素,statements是待执行的语句块。
print('---------循环字符串-------------')
for letter in 'goods':
print('当前字母是:',letter)
print('---------循环数字序列-------------')
numbers = [1,2,3,4,5]
for number in numbers:
print('当前数字是:%d'%number)
print('---------循环字典-------------')
dictionary = {'name':'小明','age':23,'性别':'男','爱好':'女'}
for dict in dictionary:
print('当前字典的值是:%s=%s'%(dict,dictionary[dict]))
print('---------循环字典,使用序列解包-------------')
for key,value in dictionary.items():
print('%s:%s'%(key,value))
输出:
---------循环字符串-------------
当前字母是: g
当前字母是: o
当前字母是: o
当前字母是: d
当前字母是: s
---------循环数字序列-------------
当前数字是:1
当前数字是:2
当前数字是:3
当前数字是:4
当前数字是:5
---------循环字典-------------
当前字典的值是:性别=男
当前字典的值是:爱好=女
当前字典的值是:age=23
当前字典的值是:name=小明
---------循环字典,使用序列解包-------------
性别:男
age:23
name:小明
爱好:女
迭代工具
并行迭代
在Python中,内建的zip函数用来进行并行迭代,可以把两个序列合并在一起,返回一个元素的列表。zip函数可以作用于任意数量的序列,并且可以应付不等长的序列,当序列用完时就停止,此时以段序列为准,当段序列执行结束,for循环就遍历结束。
for num1,num2 in zip(range(3),range(100)):
print('number=',num1)
输出
number= 0
number= 1
number= 2
反转和排序迭代
sorted()函数返回排序后的序列,reversed()函数返回反转后的序列
print(sorted([5,3,7,1]))
print(sorted('hello world!'))
print(list(reversed('hello world')))
print(''.join(reversed('hello world')))
输出:
[1, 3, 5, 7]
[' ', '!', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']
dlrow olleh
break和continue
break和continue同java,break用于跳出循环,执行循环体外的语句,continue用于跳出当前循环,继续执行剩余的循环体。
循环中的else语句
在while条件语句为false时,执行else语句
在for条件语句为false时或结束后没有被break中段时,执行else语句。
pass语句
pass不做任何事情,只是占位语句。
习题
1 猜数字
#猜数字的游戏,猜大了提示大了,猜小了提示小了,猜对了提示对了,并告知猜了几次
import random
random_num = random.randint(1,10)
input_num = input('你猜我手里的1-10的数字是多少?')
i=0
while True:
if not input_num.isdigit():
print('输入的不是数字')
break
input_num_int = int(input_num)
i+=1
if input_num_int > random_num:
input_num = input('你猜大了,再给你一次机会')
elif input_num_int < random_num:
input_num = input('你猜小了,再给你一次机会')
else:
print('恭喜你,猜对了!你一共猜了%d次'%i)
break
2是不是阿姆斯特朗数
#如果一个n位正整数等于各位数字n次方的和,就称该数为阿姆斯特朗数。例如:1^3+5^3+3^3=153
#1000以内的阿姆斯特朗数还有:1、2、3、4、5、6、7、8、9、153、370、371、407
#写一个程序,判断输入的数字是否是阿姆斯特朗数
input_num = input('请输入一个阿姆斯特朗数')
comput_result = 0
length = len(input_num)
if input_num.isdigit():
for letter in input_num:
comput_result += int(letter)**length
if comput_result == int(input_num):
print('你输入的数字',input_num,'各位相加的结果是',comput_result,',是阿姆斯特朗数')
else:
print('你输入的数字',input_num,'各位相加的结果是',comput_result,',不是阿姆斯特朗数')
else:
print('输入的不是数字!')
网友评论