前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python快速学习第四天

Python快速学习第四天

作者头像
汤高
发布2018-01-11 15:48:00
7610
发布2018-01-11 15:48:00
举报
文章被收录于专栏:积累沉淀积累沉淀

第四天:

条件 、循环和其他语句

1、    print

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

代码语言:js
复制
>>> 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、   把某件事作为另一件事导入

代码语言:js
复制
importsomemodule
fromsomemodule import somefunction
fromsomemodule import somefunction , anotherfunction ....
fromsomemodule import *   

3、   序列解包

代码语言:js
复制
多个赋值同时进行
>>> x,y,z=1,2,3
>>> print x,y,z
1 2 3
>>> 
交换变量
>>>x,y=y,x
>>>print x,y,z

21 3

4、   链式赋值

代码语言:js
复制
  >>>x=y=[1,2,3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]

5、 增量赋值

代码语言:js
复制
>>> x=2
>>> x+=1
>>> x*=2
>>> x

6

   字符串类型也适用

代码语言:js
复制
>>> 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))----在使用命名空间前放入值进 去

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档