Python学习--条件、循环结构

链接: 条件语句 循环语句

条件语句

if结构

  • if语句

    if expression:
    	expr_true_suite
    
  • if - else语句

    if expression:
    	expr_true_suite
    else:
    	expr_false_suite
    
  • if - elif - else 语句
    elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。

    if expression1:
    	expr1_true_suite
    elif expression2:
    	expr2_true_suite
    	.
    	.
    elif expressionN:
    	exprN_true_suite
    else:
    	expr_false_suite
    

    【例子】

    temp = input('请输入成绩:')	#input 函数将接收的任何数据类型都默认为 str
    source = int(temp)
    if 100 >= source >= 90:
    	print('A')
    elif 90 > source >= 80:
    	print('B')
    elif 80 > source >= 60:
    	print('C')
    elif 60 > source >= 0:
    	print('D')
    else:
    	print('输入错误!')
    

assert断言

assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。通常用来进行单元测试,在程序中置入检查点,只有条件为 True 才能让程序正常工作。

assert expression, 'error_description'

【例子】

my_list = ['gogobaby']
my_list.pop()
assert len(my_list)>0, '列表中没有元素'
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-14-8c8dcea491da> in <module>
----> 1 assert len(my_list)>0, '列表中没有元素'

AssertionError: 列表中没有元素

循环语句

循环结构

  • while循环

    while 布尔表达式:
    	代码块
    

    while循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。
    如果布尔表达式不带有<、>、==、!=、in、not in等运算符,仅仅给出数值之类的条件,也是可以的。当while后写入一个非零整数时,视为真值,执行循环体;写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。
    【例子】

    In:string = 'abcd'
       while string:
    	   print(string)
    	   string = string[1:]
    Out:abcd
    	bcd
    	cd
    	d
    
  • while-else循环

    while 布尔表达式:
    	代码块
    else:
    	代码块
    

    当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容。

    In:count = 0
       while count < 5:
           print("%d is  less than 5" % count)
           count = count + 1
       else:
           print("%d is not less than 5" % count)
        
    Out:0 is  less than 5
    	1 is  less than 5
    	2 is  less than 5
    	3 is  less than 5
    	4 is  less than 5
    	5 is not less than 5
    
  • for循环
    for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。

    In:dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
       for key, value in dic.items():
           print(key, value, sep=':', end=' ')
        
    Out:a:1 b:2 c:3 d:4 
    
  • for-else循环

    for 迭代变量 in 可迭代对象:
        代码块
    else:
        代码块
    

    当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while - else语句一样。

    In:for num in range(10, 20):  # 迭代 10 到 20 之间的数字
           for i in range(2, num):  # 根据因子迭代
               if num % i == 0:  # 确定第一个因子
                   j = num / i  # 计算第二个因子
                   print('%d 等于 %d * %d' % (num, i, j))
                   break  # 跳出当前循环
           else:  # 循环的 else 部分
               print(num, '是一个质数')
    
    Out:10 等于 2 * 5
    	11 是一个质数
    	12 等于 2 * 6
    	13 是一个质数
    	14 等于 2 * 7
    	15 等于 3 * 5
    	16 等于 2 * 8
    	17 是一个质数
    	18 等于 2 * 9
    	19 是一个质数
    

range函数

range([start=0,] stop [, step=1])	#[ ]可省略

start – 起始位置,默认为0
stop – 结束位置默认为1
step – 步长
range 这个BIF(Built-in functions)的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值。

enumerate()函数

enumerate(sequence, [start=0])

sequence – 一个序列、迭代器或其他支持迭代对象
start – 下标起始位置
返回 enumerate(枚举) 对象

enumerate()与 for 循环的结合使用:

for i, a in enumerate(A)
	 do something with a  
In:
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons, start=1))  # 下标从 1 开始
print(lst)
	
for i, sea in lst:
	print(i, 'I love', sea)
Out:
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
1 I love Spring
2 I love Summer
3 I love Fall
4 I love Winter

break语句和continue语句

break语句可以跳出当前所在层的循环。
continue终止当前所在层本轮循环并开始下一轮循环。

passwdList = ['123', '345', '890']
valid = False
count = 3
while count > 0:
	password = input('输入密码:')
	for item in passwdList:
	    if password == item:
	        valid = True
	        break		#密码正确就不再在密码表里面比对了
	            
   if not valid:
	    print('密码错误')
	    count -= 1		
	    continue	#给3次输入密码的机会
	else:
	    break
	

pass语句

pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行。
【例子】

def a_func():
	pass

推导式

  • 列表推导式

    [ expr for value in collection [if condition] ]
    

    【例子】

    In:
    a = [(i, j) for i in range(0, 3) for j in range(0, 3)]
    print(a)
    
    Out:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
    
  • 元组推导式

    ( expr for value in collection [if condition] )
    

    【例子】

    In:a = (x for x in range(10))	#生成器表达式
       print(a)
       ##注意,打印生成器,不会像列表一样打印他的值,而是地址。
       Out:<generator object <genexpr> at 0x0000025BE511CC48>
       next(a)	#0
       next(a)	#1
    

    列表解析式是一次性生成整个列表,占大量内存。如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
    生成器(generator)其实是一类特殊的迭代器,配合next()函数进行迭代使用。

    print(tuple(a))
    	
    	# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    
  • 字典推导式

    { key_expr: value_expr for value in collection [if condition] }
    

    【例子】

    In:b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
       print(b)
    Out:{0: True, 3: False, 6: True, 9: False}
    
  • 集合推导式

    { expr for value in collection [if condition] }
    

    【例子】

    In:c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
       print(c)
    Out:{1, 2, 3, 4, 5, 6}
    

练习题

1.编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。

list = []
for i in range(1500,2701):
    if i%5 == 0 and i%7 == 0:
            list.append(str(i))
print (','.join(list))
# join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

2.龟兔赛跑游戏

题目描述:

话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以 上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。

然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1 米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找 到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。

输入:

输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2< =100;t< =300;s< =10;l< =10000且为v1,v2的公倍数)

输出:

输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。

样例输入:

10 5 5 2 20

样例输出

D
4

#有错误
v1, v2, t, s , l = map(lambda x:int(x),input("请输入:").split())
lr = 0#兔子走的路程
lt = 0#乌龟走的路程
tr = 0#兔子走的时间
tt = 0#乌龟走的时间
while lr > lt + t:
    tr += s
    tt +=s
    lt += s*v2
else:
    lr = v1
    lt = v2
    tr += 1
    tt += 1
if lr == l or lt == l:
    break
if lr < l:
    print('T')
    print({}.format(l/v2))
elif lr == l:
    if tr < l/v2:
        print('R')
        print({}.format(tr))
    else:
        print('D')
        print({}.format(l/v2))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值