第五章 条件、循环及其他语句

一、print

打印多个参数,print可用于打印一个表达式,这个表达式要么是字符串,要么将自动转换为字符串,而且你还可以打印多个表达式,条件用逗号隔开它们。
print (‘age’, 42)->age42
如果想中间有冒号隔开,则print (‘age’ +’:’, 42)->age:42
sep=“符号” 可以定义分割符
end="符号/空格"可以定义换行符 (适用于多个print语句中,一般存在与脚本当中)
print(‘I’, ‘wish’, ‘to’ ‘register’, ‘a’, ‘complaint’, sep=’_’) -> I_wish_to_register_a_complaint’

二、模块的不同导入方法
  1. import somemodule
  2. from somemodule import somefunction(函数方法)
  3. from somemodule import somefunction, anotherfunction, yetanotherfunction
  4. from somemodule import *
三、赋值魔法

1. 序列解包
以前的赋值都是单个变量进行赋值,但其实是可以多个变量一起赋值,但要求值的个数与变量个数一致,否则会出现报错:
如x,y,z=1,2,3 print (x,y,z)->1,2,3 并且可以交换多个变量的值 x,y=2,1 print (x, y,z)->2,1,3
有的变量还可以包含多个值,加上星号()就可以,但主要星号是在变量前面;此外,值得注意的是,带星号赋值的变量解压出来是一个列表,而且任何位置的变量都可以加上星号进行赋值多个值,只要变量与值的个数匹配就行
a, b, *rest=[1,2,3,4] rest ->[3,4] a, *b, c='abc' a, b, c ->(a, ['b'], c)
2. 链式赋值
链式赋值是一种快捷方式,用于将多个变量关联到同一个值。
`x=y=somefunction( ) == (y=somefunction( ) x=y) 前后两种赋值是等价的,一个一步完成,即链式赋值,一个拆分为两步。
3. 增强赋值
使用增强赋值,可以使代码更紧凑、更简洁,同时在很多情况下的可读性更强。
比如代码x=x+1可以将右边的+移动左边,写成x+=1,这种表达方式成为增强赋值,不仅使用于+号,其他运算符(
、/、%等)可适用,同时,增强语句也可用于其他数据类型,只要可以使用双目运算符即可

fnord='foo' fnord+='bar' fnord *=2 fnord -> 'foobarfoobar'

四、代码块:缩进的乐趣

代码块是一组语句组成,可在满足条件时执行(if 语句),可执行多次(循环)等等,代码块是通过缩进代码创建,使用冒号(:)指出接下来是一个代码块,并将该代码块中每行代码都缩进相同的程度。发现缩进量与之前相同时,表明当前代码块已经结束了。

五、条件和条件语句

用作布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为假:
False、 None、 0、 “”、 ()、 []、 {} (即除了这七个外,其他值都可表示为真)
布尔值(True和False)属于类型bool, 其与list、str和tuple一样,可用来转换其它的值。
bool ('I think, there i am') -> True
1. 条件分支
if 条件: 条件为真(True)执行的操作 else: 条件为假(False)执行的操作
此外,还有elif语句,可以多增加几个条件,使得代码更为复杂,if语句里还可以嵌套if或elif语句,这样代码更紧凑,可执行的条件也更多
name=input('what is your name') if name.endswith('Gumby'): print ('hello, mr. gumby')
if语句则是让你有条件执行的代码。这意味着,如果条件(if 和冒号之间的表达式)为前面定义的真,就执行后续的代码块(这里为print语句);如果条件为假,就不执行
num=int (input ('Enter a number: ')) if num>0: print ('The number is positive') elif num<0: print ('The number is negative') else: print ('The number is zero')
2. 更复杂的条件

1)比较运算符
- 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的成员
- 注意还有链式比较表达式,即0<x<10这种表达式
**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是判断是否相同对象,而并不是比较两个值是否相等。
字符串和序列的比较(字符串是根据字符的字母排列顺序进行比较的,要注意的是字母都是Unicode符)

2)**布尔运算符 **

  • and
  • or
  • not
number= int (input ('Enter a number between 1 and 10:'))
 if number <=10 and number<=1:
     print ('great')
else:
    print ('wrong')  
  1. 断言(assert)
    其语法与if条件分支语句,当这个关键字后面的条件为假时,程序会自动崩溃并抛出AssertionError的异常。
    一般用于当测试程序时,要确保程序一定为真时,可以用断言语句在程序一开始出现假时即奔溃,防止其一直执行错误的程序,同时还占用内存。
    **六、循环 **
    重复执行代码时需要用到循环,主要有while语句和for语句
    **1. while 循环 **zai
    while循环中,只要条件为真,就会一直循环重复执行那段代码,这段代码也称为循环体。
while 条件:
    循环体
x=1
while x<=100:
    print (x)
    x+=1

**2. for 循环 **
while循环只在条件为真时反复执行代码块。要指定条件反复执行时,一般要用到for循环,可以自定义要迭代(也称为遍历)的对象:
上面的代码可以写成:

for i in range (1, 101):
    print (i)

这段代码比while循环更为简单紧凑,所以,一般能用for循环写的代码,尽量避免使用while循环来写;
range ( )函数
range ([start, ] stop [, step=1]) :一共有三个参数,其中中括号内的参数可以省略,有点类似于切片,,它包含起始位置,但不包括结束位置。step相当于步长,默认为1

for i in range(1, 10,2):
    print (i)
1
3
5
7
9

for循环还可以用于迭代字典,即判断键是否存在就行

d={'x':1, 'y':2, 'z':3}
for key in d:
    print (key, 'corresponds to', d[key])

由于字典元素的排列顺序是不确定的,所以迭代字典的键或值时也是不确定的。
**3. 迭代工具(内置函数) **
** zip函数:并行迭代 **
它可将两个序列“缝合”起来,并返回一个由元组组成的序列,返回值是一个适合迭代的对象,要查看其内容,可使用list将其转化为列表,在不适用zip函数时可以采用索引也能达到该效果,但代码过于复杂

names=['anne', 'beth', 'george', 'damon']
ages=[12,45,32,102]
for i in range(len(names)):
    print (names[i], 'is', age[i], 'years old')(注意任何一个符号都缺一不可,相互之间应该用逗号隔开,否则会出现报错   
用zip可以表示如下   
for name, age in zip(names, ages):
   print (name, 'is', age, 'years old')

以上例子都是迭代两个个数相同的序列,如果序列长度不同时,函数zip将在最短的序列用完后停止“缝合”。

list zip((range(5), range(100)))
[(0,0),(1,1),(2,2),(3,3),(4,4)]
  • enumerate:迭代时获取索引
    在迭代对象序列的同时获取当前对象的索引。
    如想替换一个字符串列表中所有包含子串"xxx”的字符串。
for index, string in enumerate (strings):
    if 'xxx' in string:  
        strings[index]='[censored]'
  • reversed:反向迭代
  • sorted:排序后迭代
    4. 跳出循环
  • break语句:终止当前循环,跳出循环体
 from math import sqrt
 for n in range(99, 0, -1):
     root =sqrt(n)
     if int(root)=root:
         print(n)
         break
         ->81
  • contine语句:终止本轮循环并开始下一轮循环(在开始下一轮循环前,会先测试循环条件),但不结束循环。当循环体庞大而复杂是,存在多个要跳过它的原因时很有用。
  • pass语句:pass是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。
  • while True/break
 while True;
     word=input('please enter a word: ‘)
     if not word: break
     print('the word was ', word)  

while True导致循环永不结束,但将条件放在了循环体内的一条if语句中,而这条if语句将在条件满足时调用break.这说明并非只能像常规while循环那样只能在循环开头结束循环,而是可在循环的任何地方结束循环。if/break行将整个循环分成两部分:第一部分负责设置(如果是常规while循环,将重复部分),第二部分在循环条件为真时使用第一部分初始化的数据。
-简单推导
列表推导是一种从其他列表创建列表的方式,类似于数字中的集合推导,列表推导的原理与for循环比较类似。

result=[]
for x in range(3):
    for y in range(3):
        result.append((x,y))
用列表推导式可以写成:[(x,y)for x in range(3)for y in range(3)]
其他的还可以加入if语句:[x*x for x in range(10)if x%3==0]

del语句:可用于删除对象名称,但对象值其实并没有删除,即使如此,python中没有对应名称,也无法解释出对应的值,而值在解释器中存储一段时间后一直没有访问,会被自动删除。
excel语句
eval语句

猜你喜欢

转载自blog.csdn.net/ihblxh/article/details/84235340