Python快速学习第四天

第四天:

条件 、循环和其他语句

1、    print

使用逗号输出 - 打印多个表达式也是可行的,但要用逗号隔开

>>> print 'tanggao ',20
tanggao  20
>>> 1,2,3
(1, 2, 3)
>>> print 1,2,3
1 2 3
>>> print(1,2,3)
(1, 2, 3)

注意:python3.0以后,print不再是语句,而是函数,函数要加上括号

2、   把某件事作为另一件事导入

importsomemodule
fromsomemodule import somefunction
fromsomemodule import somefunction , anotherfunction ....
fromsomemodule import *   

3、   序列解包

多个赋值同时进行
>>> x,y,z=1,2,3
>>> print x,y,z
1 2 3
>>> 
交换变量
>>>x,y=y,x
>>>print x,y,z

21 3

4、   链式赋值

  >>>x=y=[1,2,3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]

5、 增量赋值

>>> x=2
>>> x+=1
>>> x*=2
>>> x

6

   字符串类型也适用

>>> str='tang'
>>> str+='gao'
>>> str*=2
>>> str
'tanggaotanggao'

语句块:

缩排的乐趣,语句块实在条件为真时(条件语句)时执行或者执行多次(循环语句)的一组语句

在代码前放置空格来缩进语句即可创建语句块,在python中用冒号(:)用来标识语句快的开始巨快中的每个语句都是缩进相同的

条件和条件语句

布尔变量

真值

下列值作为布尔表达式会被解释器看做假:

False  None  0  “”  ()  []  {}

标准值False ,None,所有类型的数字0,空序列(列表,元组,字符串,空字典)都为假,其他一切都解释为真(True)

(0,1)与(False,True):

>>> True

True

>>> False

False

>>> True==1

True

>>> False==1

False

>>> True+False+42

43

布尔值属于布尔类型;bool函数可以用来转换其他值

>>> bool('i think , therefore i am')

True

>>> bool(42)

True

>>> bool("")

False

>>> bool(0)

False

条件执行和if语句

name=input('what is your name?')

if name.endswith('chen'):

    print ('hello ,mr.chen')

>>> 

what is your name?chen

hello ,mr.chen

>>> 

else子句

name=input('what is your name?')

if name.endswith('chen'):

    print ('hello ,mr.chen')

else:

    print ('hello,stranger')

>>> 

what is your name?qqq

hello,stranger

>>> 

elif子句-----检查多个条件,后面带条件

num=input('input a number: ')

if num>'0':--------’0’表示字符串,输入赋值时是字符串

    print ('the number is positive.')

elif num<'0':

    print ('the number is negative.')

else:

    print ('the number is zero.')

嵌套代码块----类似C语言了

name=input('what is your name?')

if name.endswith('chen'):

    if name.startswith('mr.'):

        print ('hello,mr.chen')

    elif name.startswith('mrs.'):

        print ('hello ,mrs.chen')

    else:

            print ('hello ,chen')

else:

    print ('hello ,stranger')

>>> 

what is your name?chen

hello ,chen

>>> 

what is your name?mr.chen

hello,mr.chen

>>> 

what is your name?rrr

hello ,stranger

>>> 

更复杂的条件

is:同一性运算符,而不是相等性,同一对象

in:成员资格运算符

name=input('what is your name ')

if 's' in name:

    print ("true")

else:

    print ("false")

字符串和序列的比较

字符串可以按照字母顺序排列进行比较

>>> "alpha"<"beta"

True----------------------从第一个字母开始,如果大就不再进 行 下去

布尔运算符

nu=input ('input a number (1-10): ')

if '1'<=nu<='10'://nu<=10 and nu>=1

    print ('true')

else:

    print ('false')

and 就是所谓的布尔运算符,连接连接两个布尔值,两者为 真返回真,否假,同类 or和not

断言--------要求某些条件必须为真,使用assert

>>> assert 0<age <100

>>> age=-2

>>> assert 0<age<100

Traceback (most recent call last):

  File "<pyshell#9>", line 1, in <module>

    assert 0<age<100

AssertionError

>>> assert 0<age<100,'false'

Traceback (most recent call last):

  File "<pyshell#10>", line 1, in <module>

    assert 0<age<100,'false'----------条件后可以添加字符串 解释断言 AssertionError: false

>>> 

------要确保程序中的某个条件一定为真才能让程序正常工 作,assert 就很有用

循环

while循环

x=1

while x<=100:

    print (x)

    x+=1

name=''

while not name or name.isspace(): 

    name=input('please enter your name: ')

print ('hello,%s!' % name)------输入回车,一直提示输入,直到输入为 止,连输入空格也一样

for循环

w=['hello',',','xi','men']

for word in w:

    print (word)

n=[0,1,2,3,4,5,6,7,8,9]

for number in n:

    print (number)

range(0,10)

[0,1,2,3,4,5,6,7,8,9]----内建范围函数

Range函数类似分片,范围=>0,没上限

>>> for number in range(1,100):

print (number)------输出1到99

循环遍历字典元素

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

for key in d:

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

z corresponds to 3

x corresponds to 1

y corresponds to 2

------从输出可以看出,字典唯一对应的是键值,输出顺序随机,并无 固定顺序

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

for key,values in d.items():

    print(key,'corresponds to',values)

x corresponds to 1

y corresponds to 2

z corresponds to 3

------对顺序有要求时,items会将键值作为元组返回,然后便可顺序 输出,因为元组是不可变序列,只能xyz顺序输出

迭代工具

并行迭代

n=['chen','xi','tu','er']

age=[18,19,201,21]

for i in range(len(n)):------len(n)取n=4,带入range 得0<= <4范围

    print (n[i],'is',age[i],'years old')

chen is 18 years old

xi is 19 years old

tu is 201 years old

er is 21 years old

Zip函数进行并行迭代,可以把两个序列压缩在一起,返回一个元组

>>> n=['chen','xi','tu','er']

>>> age=[18,19,201,21]

>>> list(zip(n,age))

[('chen', 18), ('xi', 19), ('tu', 201), ('er', 21)]

在循环中解包元组:

n=['chen','xi','tu','er']

age=[18,19,201,21]

for i in zip(n,age):

    print (n,'is',age,'years old')

编号迭代

-----获取迭代对象的同时,还获取当前对象的索引

在一个字符串列表中替换包含’abc’的子字符串

1---------

strings=['abcd','abd','acd','abc']

for string in strings:

    if 'abc' in string:

        index=strings.index(string)

        strings[index]='[ddddd]'

print(strings)

enumerate-------在提供索引的地方迭代索引-值对

翻转和排序迭代

reversed,sorted函数

-----返回翻转或排序后的版本

>>> sorted([4,3,5,6,7])

[3, 4, 5, 6, 7]

>>> sorted('hello,world')

[',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']

>>> list(reversed('hello,world'))

['d', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h']

>>> ''.join(reversed('hello,world'))

'dlrow,olleh'

-----sorted返回列表,reversed返回可迭代对象,不能直接对他使 用索引,分片以及调用list方法

跳出循环

Break

-----结束(跳出)循环可以使用break语句

from math import sqrt

for n in range(99,0,-1):------------1为反向迭代步长参数

    root=sqrt(n)

    if root==int(root):

        print (n)

        break

------从100往下倒0,找到一个平方数就不再继续循环

Continue

----跳过剩余循环体,但不结束循环

While true/break

word=input('please input a word: ')

while word:

    word=input('please input a word: ')

    print ('the word was '+word)

word=input('please input a word: ')

------输入单词,不输入结束循环

改善:

while True:

    word=input('please input a word: ')

    if not word:break

    print ('the word was '+word)

While True实现永远不会自己停止的循环

循环中的else子句

from math import sqrt

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

    root=sqrt(n)

    if root==int(root):

        print (n)

        break

else:----------仅在没有调用break执行

    print ("didn't find it")

>>> 

didn't find it

>>> 

------for,while中都可以使用continue,break,else

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

-----利用其他列表创建新列表,类似for

>>> [x*x for x in range(10)]

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> 

>>> [x*x for x in range(10) if x%3==0]

[0, 9, 36, 81]

>>> [(x,y) for x in range(3) for y in range(3)]

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

>>> 

类比:

a=[]

for x in range(3):

    for y in range(3):

        a.append((x,y)

>>> word=['1A','3B','3C','2D']

>>> number=['1a','2b','3c','4d']

>>> [b+'+'+g for b in number for g in word if b[0]==g[0]]

['1a+1A', '2b+2D', '3c+3B', '3c+3C']

>>> -------连接首字母相同的元素

三人行

pass,del,exec

Pass---做占位符

del

--------移除一个对象的引用和名字

>>> x=['hello','world']

>>> y=x

>>> del x

>>> y

['hello', 'world']

>>> 

------x和y指向同一列表,删除x只是删名称,而不是值本 身,python是没办法删除值得,解释器会自动回收内存

使用exec和eval执行和求值字符串

exec

-------执行一个字符串的函数(python 3.0),动态创建 代码字符串

>>> exec ("print ('hello,world')")

hello,world

-----简单的使用不妥当,要声明一个命名空间放置变量,从而不改变你的变量

in<scope>----起到放置代码字符串命名空间作用的字典

from math import sqrt

scope={}

exec ‘sqrt=1’ in scope

sqrt(4)

2.0

scope[‘sqrt’]--------不会覆盖原sqrt函数,通过exec 赋值的变量只在它的作用域内有效

1

eval

------用于求值,计算python表达式,并返回结果值

>>> eval(input("input an arithmetic expression: "))

input an arithmetic expression: 5+9

14

>>> 

-------也可使用命名空间,可以给eval提供两个命名空间, 一个全局一个局部,全局必须是字典,局部可以为任何形式 的映射

scope={}

scope['x']=2

scope['y']=3

print(eval ('x*y',scope))----在使用命名空间前放入值进 去

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区