Python3.5笔记——第6章 条件、循环和其他语句

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('输入的不是数字!')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容