python 学习 之 第二章(条件、循环和其他语句)
1. 简单的条件执行语句( if )
num = int( input("enter a number\n") )
if num == 0:
print("num = 0\n")
else:
print("num != 0\n")
稍微复杂一点的执行语句:
num = int( input("enter a number\n") )
if num == 0:
print("num = 0\n")
elif num > 0:
print("num > 0\n")
else:
print("num < 0\n")
从上面的例子可以看出,条件判断句,就是根据一个执行语句的结果的bool值,来确定句子下面的语句是否执行,
if 判断语句(如果为真,执行:后面的句子,否则执行else 或者elif 后面的语句),
记住if也罢,elif也罢,else也罢,都不能忘记后面的冒号:两个点;否则都是错误的;
2. 简单的循环执行语句(while)
4.1 一个简单的循环输出
x = 1
while x <= 5:
print (x)
x += 1
1
2
3
4
5
4.2 一个稍微复杂一点的while循环:
name = input("please enter your name:\n")
while name not in ('aiyq195','wgj','yb'):
print("the name is err\n")
name = input("please enter your name,too:\n")
please enter your name:
j
the name is err
please enter your name,too:
ni
the name is err
please enter your name,too:
aiyq195
4.3 判断如何退出while循环
x = int(input("Enter a number to exit the loop!\n"))
while x:
print ("The number unable to exit the loop!\n")
x = int(input("Enter a number to exit the loop!\n"))
在IDE版本中执行上面的语句,得到下面的结果:
Enter a number to exit the loop!
8
The number unable to exit the loop!
Enter a number to exit the loop!
-1
The number unable to exit the loop!
Enter a number to exit the loop!
0
从上面的结果,我们找到了如何退出while循环的条件,也就是while循环退出的条件只有一种可能,就是你的判断条件执行结果为0。
特别是我们在执行while循环时,使用的判断条件为数字的时候,他不会因为你的值为负数,他就会退出;
3. for循环的例子
5.1 简单的for循环说明
while循环非常的灵活,它可以用来在任何条件为真的情况下重复执行一个代码块。但是有的时候,需要量体裁衣。比如要为一个集合的每个元素执行一个代码块。这个时候可以使用for语句:
words = ['this','is','an','ex','parrot']
for word in words:
print (word)
======================= RESTART: E:/python/pyth/for.py =======================
this
is
an
ex
parrot
可以由上面的句子看出来,一个for循环,他的循环是有一个依据的,也就是,它可能是根据你已经定好的一个列表的或者一个元组、字典里的元素来走它的循环依据;
5.2 for循环的一个关键字 range()
for number in range(0,10):
print(number)
for number in range(0,10,2):
print(number)
在IDE上执行结果如下:
0
1
2
3
4
5
6
7
8
9
0
2
4
6
8
查看上面的结果知道,range()函数,可以迭代一些数字,让for循环以此来作为判断条件执行,其中,也包括了步长,也就是第三个参数,你可以由此来确定;
1. python 中的赋值语句
赋值很简单的一个赋值语句就可以搞定,或者一片句子就可以实现的功能;但是也需要稍微的来写些内容,让你记住一些赋值的方法,在你应用的时候,你会发现一些应用时的方便;
并行赋值句子
>>> x = 1 ;y = 2
>>> y
2
>>> x
1
其实所谓的并行赋值,就是将几个变量的赋值语句用一个分号隔开,然后,写入到一行中;
序列解包赋值句子
多个赋值操作可以同时进行:
>>> x,y,z = 1,2,3
>>> x
1
>>> y
2
>>> z
3
>>> print (x,y,z)
1 2 3
而且,它竟然可以直接调换值;(在c中,需要使用一个临时值,才能实现这个功能)
>>> x,y = y,x
>>> print (x,y,z)
2 1 3
在python书中,解释道上面所做的事情,叫做序列解包(sequence unpacking) 或递归解包 – 将多个值的序列解开,然后放到变量的序列中。更形象的说明就是下面这个:
>>> values = 1,2,3
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> x
1
>>> y
2
当函数或者方法返回元组(或者其他序列或可迭代对象)时,这个特性尤其有用。
假如需要获取(或删除)字典中的任意的键、值对,可以使用popitem方法,这个方法将键值作为元组的元素返回。那么这个元组就可以直接赋值到两个变量中:
>>> dicName = {'name':'aiyq','girlfriend':'who'}
>>> key,value = dicName.popitem()
>>> key
'name'
>>> value
'aiyq'
它允许函数返回一个以上的值,并且打包成元组,然后通过一个赋值语句很容易进行访问。所解包的序列中的元素数量必须和放置在赋值符号=左边的数量完全一致,否则python会在赋值时,引发异常:
>>> x,y = dicName.popitem()
>>> print(x,y)
girlfriend who
>>> x,y = dicName.popitem()
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
x,y = dicName.popitem()
KeyError: 'popitem(): dictionary is empty'
>>> x,y,z = 1,2
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
x,y,z = 1,2
ValueError: need more than 2 values to unpack
从上面的内容,再根据popitem方法的应用,可以理解上面的调用的方法;
>>> dicName = {'name':'aiyq','girlfriend':'who'}
>>> x,y,z,g = dicName.popitem()
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
x,y,z,g = dicName.popitem()
ValueError: need more than 2 values to unpack
也就是你使用方法后,会截取的一个键值字典元素,
然后,放入到两个你想要存放的变量中,如果你想一次给予多个变量值的时候,就会返回异常;
然后,如果你在一次给多个值,赋值的时候,如果你也是没有给对对应的变量数时,也一样会报异常:
链式赋值句子:
链式赋值(chained assignment) 是将同一个值赋给多个变量的捷径。
它看起来有些像并行赋值,但是,它处理的是一个值:
>>> x = y = 1
>>> x
1
>>> y
1
其实,它和下面的句子一样;
x = 1
y = x
增量赋值句子
增量赋值其实就是在等号附近加上 +、-、*、/符号;
然后,变量左边的值,会等于 你的等号前的符号与等号后的值的运算后的结果;
如:
>>> x = 1
>>> x += 1
>>> x
2
>>> x *= 8
>>> x
16
>>> del x
>>> x
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
x
NameError: name 'x' is not defined
>>> x += 1
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
x += 1
NameError: name 'x' is not defined
从上面的结果,就可以看出来,自增赋值的效果是什么样子的;
它就是一个将你的赋值句子懒省事的一个方法;
我们想要x = x + 1;这个值的结果;
但是,我们就这么去写 x += 1;
这样去获取;其实还是懒人做事,懒省事的做法;
而且在python中,对于字符串,也是适用的;
>>> py = 'aiyq'
>>> py
'aiyq'
>>> py += '195'
>>> py
'aiyq195'
>>> py *= 2
>>> py
'aiyq195aiyq195'
真假句子(布尔句子/判断句子)
一个句子也会有真假,也就是可以做出判断是否正确的选择;
如 x = 3,这是个赋值语句,但是如果我们这样执行呢?
x = 3
x == 4 呢?
这时候,我们就知道
>>> x = 3
>>> x == 4
False
它返回了False,这就是一个简单判断句子;
我们可以使用它来作为一个循环或者if语句的条件来使用;
2. python 中的运算符
运算符,可以让一些数据加减乘除等,也可以判断一些条件是否为真等;作为一个判断的中间者,它来称为运算符;
比较运算符:
用着条件中的最基本的运算符就是比较运算符了,他们用来比较其他对象,常用的比较运算符:
表达式 表达式的含义
x == y x 等于 y
x < y x 小于 y
x > y x 大于y
x >= y x 大于等于 y
x <= y x 小于等于 y
x != y x 不等于 y
x is y x 和 y是同一个对象
x is not y x 和 y 不是同一个对象
x in y x是y容器的成员
x not in y x不是y容器的成员(容器,也就序列、元组、字典的)
对于比较运算符理论上,对于相对大小的任意两个对象都是可以使用比较运算符比较的,并且都会得到一个布尔值的结果。但是,只有在两个对象是相同的或者近似的类型的对象时,比较才有意义。
比如:我们将一个字符串跟一个数字直接比较,没有什么意义;
也有的时候,我也在别人的代码中看到过的一个比较符 – x <> y;
这个其实的意思就是 x不等于y 的意思;但是虽然给人一个高深的感觉,但是感觉看着讨厌;
谁都不想让后人看到你写的代码,说:“我去,这什么鬼玩意!”;
所以,能简单的写出来的代码,不要搞的太复杂;
其中特殊说明几个运算符:
相等运算符:
如果想要知道两个对象是否相等,就需要使用这个运算符。
但是这个运算符,人们使用的时候,经常会跟 赋值符 = 去混肴;
好比,我们需要一个判断条件
num = int(input())
if num == 1:
num += 1
print(num)
else :
print(num)
====================== RESTART: E:/python/pyth/deng.py ======================
5
5
如果我们使用 一个等号,就相当于赋值了,那样是不能比较的;
>>> '2' == '2'
True
>>> '2' = '2'
SyntaxError: can't assign to litera
Is:同一性运算符
>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
从上面可以看出来,is是判断两个值,指向的对象是否为同一个对象,就算它们的对象的内容一样,但是如果不是同一个对象,它也是返回错误的;
3. 三个语句:pass、del、exec
pass 语句:
有的时候,程序什么事情都不用做,但是这种情况一出现,就应该pass语句出现了;
pass语句只是作为占位符出现,它没有其他的作用,因为在python中如果有空代码块是非法的,而pass语句就相当于一个过渡,让程序接着走下去;
>>> pass
>>>
del语句:
一般来说,python会自动删除那些不再使用的对象,但是,有的时候,我们需要自己删除一些对象,所以,我们就需要使用del语句来实现这个功能;
exec 和 eval 语句:
有些时候可能会需要动态的创建python代码,然后将其作为语句执行或作为表达式计算,但是,使用时,一定要仔细考虑;
exec
执行一个字符串的语句就是exec 函数实现的功能;
>>> exec("print("nihao")")
SyntaxError: invalid syntax
>>> exec(print("nihao"))
nihao
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
exec(print("nihao"))
TypeError: exec() arg 1 must be a string, bytes or code object
>>> exec("print('nihao')")
Nihao
从上面可以看出,exec函数,是将一个字符串内的句子作为一个语句执行
但是,exec函数也会造成一个问题,就是下面这个代码段:
>>> from math import sqrt
>>> sqrt(4)
2.0
>>> int(sqrt(4))
2
>>> exec("sqrt = 4")
>>> sqrt(2)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
sqrt(2)
TypeError: 'int' object is not callable
>>> sqrt
4
>>> eval(input("enter an arigh :"))
enter an arigh :3 + 19 * 2
41
而我们从上面可以看出,有的时候,如果我们如果使用了exec函数,会造成上面的调用模块的方法失败,所以使用的时候需要小心;