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函数,会造成上面的调用模块的方法失败,所以使用的时候需要小心;

posted on 2017-03-10 12:04  aiyq195  阅读(219)  评论(0编辑  收藏  举报

导航