python 条件,循环和其他语句的学习笔记

时间:2022-12-26 00:11:40

1、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运算符是判定同一性而不是相等性的。变量x和y都被绑定在同一个列表上,而变量z被绑定在另一个焗油相同数值和顺序的列表上。它们的值可能相等,但是却不是同一个对象。

总结:使用==判读两个对象是否相等,使用is判断两个对象是否等同。

 

2、布尔运算符

and运算符就是所谓的布尔运算符。它连接两个布尔值,并且在两者都为真时返回真,否则返回假。

与它同类的还有两个运算符or和not

 

3、条件表达式

a if b else c表示b为真则返回a,否则返回c

 

4、断言

assert相当于语句:

if not condition

   crash program(程序崩溃)

你可以试试以语句:

>>> age=-1
>>> assert 0<age<100, 'The age must be realistic'
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AssertionError: The age must be realistic

5、while循环

name=''

while not name:

   name = raw_input('please enter your name ')

print 'Hello,%s!' %name

运行该程序,如果直接输入一个空格,程序会接受这个名字,因为包括一个空格的字符并不是空的,我们可以把while not name改为while not name or name.isspace()或者改为while not name.strip()

 

6、for循环

words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
   print word

 

for number in range(1,101):

   print number

 

xrange函数类似于range,只是range一次创建整个序列,而xrange一次只创建一个数。

 

7、循环遍历字典元素

d = {'x':1,'y':2,'z':3}

for key in d:

  print key,'corresponds to',d[key]

 

d = {'x':1,'y':2,'z':3}

for key,value in d.items():

  print key,'corresponds to',value

 

d.items()将键-值对作为元组返回

 

8、一些迭代工具

(1)并行迭代

程序可以同时迭代两个序列,比如有下面两个列表:

names = ['ann','hjk','ddd']

ages=[12,13,19]

如果想要打印名字和对应的年龄,可以像下面这样做:

for i in range(len(names)):

   print names[i], 'is' ,ages[i],'years old'

而内建的zip函数可以用来进行并行迭代,可以把两个序列压缩在一起,然后返回一个元组的列表

如:zip(names,ages)

zip可以应付不等长的序列,当最短的序列“用完”就会停止:

>>> zip(range(5),xrange(100))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

(2)编号迭代

有些时候想要迭代序列中的对象,同时还要获取当前对象的索引

例如在一个字符串列表中替换所有包含'xxx'的子字符串。

可以使用内建的enumerate函数:

for index,string in enumerate(strings):

    if 'xxx' in string:

   strings[index]= '[censored]'

这个函数可以提供索引的地方迭代索引-值对。

(3)翻转和排序迭代

>>> sorted([4,3,6,8,3])
[3, 3, 4, 6, 8]
>>> sorted('Hello,world!')
['!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> list(reversed("Hello,world!'))
  File "<stdin>", line 1
    list(reversed("Hello,world!'))
                                 ^
SyntaxError: EOL while scanning single-quoted string
>>> list(reversed('Hello,world!'))
['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']
>>> ''.join(reversed('Hello,world!'))
'!dlrow,olleH'
reversed和sorted作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本

虽然sorted返回列表,reversed却返回一个更加不可思议的可迭代对象。不能直接对它使用索引,分片以及调用list方法,如果希望进行上述处理,可以使用list类型转换返回的对象。

 

9、跳出循环

(1)break

from math import sqrt

for n in range(99,0,-1):

   root=sqrt(n)

   if root==(int)root:

      print n

      break

range 的第三个参数-表示步长,如果是负数则表示反向迭代。

(2)continue

 

10、while True/break习语

while True:

     word = raw_input('Please input a word: ')

     if not word:break

     print 'The word was '+ word

 

11、循环中的else语句

from math import sqrt
for n in range(99,81,-1):
     root=sqrt(n)
     if root==int(root):
       print n
       break
else:
 print"didn't find it!"

12、列表推导式---轻量级循环

girls = ['alice','bernice','clarice']
boys= ['chris','arnold','bob']
letterGirls = {}
for girl in girls:
  letterGirls.setdefault(girl[0],[]).append(girl)
print [b+'+'+g for b in boys for g in letterGirls[b[0]]]
这个程序创建了一个叫letterGirls的字典。

 

13、什么都没发生

pass相当于C语言的分号;

 

14、使用del删除

del不仅会移除一个对象的引用,也会移除那个名字本身。

>>> x=1
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'x' is not defined
看起来很简单,但有时理解起来有点难,例如下一个例子:

>>> x=["Hello","World"]
>>> y=x
>>> y[1]="python"
>>> x
['Hello', 'python']
会有人认为删除x后,y也消失了,但并非如此:

>>> del x
>>> y
['Hello', 'python']
x和y都指向了同一个列表,但是删除x并不影响y,原因就是删除的只是名称,而不是列表本身。

在python中是没有办法删除值的,python解释器会负责内存的回收。