Python3.5 笔记

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

2018-09-06  本文已影响0人  行者无疆_1024

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('输入的不是数字!')
上一篇下一篇

猜你喜欢

热点阅读