第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Python学习6——条件 循环语句

Python学习6——条件 循环语句

时间:2021-11-25 05:08:04

相关推荐

Python学习6——条件 循环语句

条件语句

真值也称布尔值。

用作布尔表达式时,下面的值都将被视为假:False None 0 "" () [] {}。

布尔值True和False属于类型bool,而bool与list、str和tuple一样,可用来转换其他的值。

>>> bool('I think,therefore I am')True>>> bool(10)True>>> bool('')False>>> bool(0)False

if语句

>>> name = input('What is your name?')What is your name?Gumby>>> if name.endswith('Gumby'):print(name)Gumby

如果条件(if和冒号之间的表达式)是前面定义的真,就执行后续代码块,如果条件为假,就不执行。

else子句,elif子句,嵌套代码块

>>> name = input('What is your name?')What is your name?Gumby>>> if name.endswith('Gumby'):if name.startswith('Mr.'):print('Hello,Mr.Gumby')elif name.startswith('Mrs.'):print('Hello,Mrs.Gumby')else:print('Hello,Gumby')else:print('Hello,stranger')Hello,Gumby

比较运算符:

>>> x = y = [1,2,3]>>> z = [1,2,3]>>> x == yTrue>>> x == zTrue>>> x is yTrue>>> x is zFalse>>> #is检查两个对象是否相同(不是相等),变量x和y指向同一个列表,而z指向另一个列表(即使它们包含的值是一样的),这两个列表虽然相等,但并非同一个列表。

ord函数可以获取字母的顺序值,chr函数的作用与其相反:

>>> ord('a')97>>> ord('v')118>>> chr(118)'v'

断言:assert

>>> age = 10>>> assert 0 < age < 11>>> age = -1>>> assert 0 < age < 11Traceback (most recent call last):File "<pyshell#47>", line 1, in <module>assert 0 < age < 11AssertionError>>> age = -1>>> assert 0 < age < 11,'the age must be realistic' #字符串对断言做出说明Traceback (most recent call last):File "<pyshell#49>", line 1, in <module>assert 0 < age < 11,'the age must be realistic' #字符串对断言做出说明AssertionError: the age must be realistic

循环

while 循环

>>> name = '' >>> while not name.strip(): #屏蔽空格name = input('please enter your name:')print('hello,{}!'.format(name))please enter your name:Momohello,Momo!

for循环

>>> numbers = [0,1,2,3,4,5,6,7,8]>>> for number in numbers:print(number)012345678

内置函数range():

>>> range(0,10)range(0, 10)>>> list(range(0,10)) #范围[0,10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(10)#如果只提供1个位置,将把这个位置视为结束位置,并假定起始位置为0range(0, 10)>>> for num in range(1,10):print(num)123456789

迭代字典:

>>> d = dict(a=1,b=2,c=3)>>> d{'a': 1, 'b': 2, 'c': 3}>>> for key in d:print(key,'to',d[key])a to 1b to 2c to 3

换一种方式迭代:

>>> for key,value in d.items():print(key,'to',value)a to 1b to 2c to 3>>> d.items()dict_items([('a', 1), ('b', 2), ('c', 3)])

并行迭代:

同时迭代2个序列。

>>> names = ['aaa','bbb','ccc']>>> ages = [10,11,12]>>> for i in range(len(names)):print(names[i],'is',ages[i],'years old')aaa is 10 years oldbbb is 11 years oldccc is 12 years old

内置函数zip,可以将2个序列缝合起来,并返回一个由元组组成的序列。

>>> list(zip(names,ages))[('aaa', 10), ('bbb', 11), ('ccc', 12)]>>> for name,age in zip(names,ages):print(name,'is',age,'years old')aaa is 10 years oldbbb is 11 years oldccc is 12 years old

zip函数可以缝合任意数量的序列,当序列的长度不同时,zip函数将在最短的序列用完后停止缝合。

>>> list(zip(range(5),range(10)))[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

迭代时获取索引:

>>> strings = ['aac','ddd','aa','ccc']>>> for string in strings:if 'aa' in string: #替换列表中所有包含子串‘aa’的字符串index = strings.index(string) #在列表中查找字符串strings[index] = '[censored]'>>> strings['[censored]', 'ddd', '[censored]', 'ccc']

优化一下:

>>> strings = ['aac','ddd','aa','ccc']>>> index = 0>>> for string in strings:if 'aa' in string:strings[index] = '[censored]'index += 1>>> strings['[censored]', 'ddd', '[censored]', 'ccc']

继续优化:

内置函数enumerate能够迭代索引-值对,其中的索引是自动提供的。

>>> strings = ['aac','ddd','aa','ccc']>>> for index,string in enumerate(strings):if 'aa' in string:strings[index] = '[censored]'>>> strings['[censored]', 'ddd', '[censored]', 'ccc']

反向迭代和排序后在迭代:

>>> sorted([4,2,5,1,3])[1, 2, 3, 4, 5]>>> sorted('hello,world') #sorted返回一个列表[',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']>>> list(reversed('Hello,world')) #reversed返回一个可迭代对象,['d', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']>>> ''.join(reversed('Hello,world'))'dlrow,olleH'>>> sorted('aBc',key=str.lower) #按照字母表排序,可以先转换为小写['a', 'B', 'c']

break 跳出循环

>>> from math import sqrt>>> for n in range(99,1,-1): #找出2-100的最大平方值,从100向下迭代,找到第一个平方值后,跳出循环。步长为负数,让range向下迭代。root = sqrt(n)if root == int(root): #开平方为整print(n)break81

while True/break

>>> while True: #while True导致循环永不结束word = input('enter your name:')if not word:break #在if语句中加入break可以跳出循环print(word)enter your name:aaaaenter your name:bbbbenter your name:>>>

简单推导

列表推导式一种从其他列表创建列表的方式,类似于数学中的集合推导。

>>> [x*x for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

打印能被3整除的平方值

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

使用多个for部分,将名字的首字母相同的男孩和女孩配对。

>>> girls = ['aaa','bbb','ccc']>>> boys = ['crde','bosy','adeb']>>> [b+'+'+g for b in boys for g in girls if b[0]==g[0]]['crde+ccc', 'bosy+bbb', 'adeb+aaa']

上面的代码还能继续优化:

>>> girls = ['aaa','bbb','ccc']>>> boys = ['crde','bosy','adeb']>>> letterGrils = {}>>> for girl in girls:letterGrils.setdefault(girl[0],[]).append(girl) #每项的键都是一个字母,值为该字母开头的女孩名字组成的列表>>> print([b+'+'+g for b in boys for g in letterGrils[b[0]]])['crde+ccc', 'bosy+bbb', 'adeb+aaa']

字典推导

>>> squares = {i:'{} squared is {}'.format(i,i**2) for i in range(10)}>>> squares[8]'8 squared is 64'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。