Python学习Task02

条件循环结构

条件结构

if语句

if expression:
    expr_true_suite
  • 在第一行中,可包含任何条件测试,而在紧跟在测试后面的缩进代码块中,可执行任何操作,如果条件测试的结果为True,python会执行紧跟在if语句后面的代码,否则python将忽略这些代码。
  • if 语句的 expr_true_suite 代码块只有当条件表达式 expression 结果为真时才执行,否则将继续执行紧跟在该代码块后面的语句。
  • 单个 if 语句中的 expression 条件表达式可以通过布尔操作符 and,or和not 实现多重条件判断。

if-else语句

if expression:
    expr_true_suite
else:
    expr_false_suite
  • if-else语句块类似于简单的if语句,但其中的else语句能够构成指定条件测试未通过时要执行的操作。

  • 如果 if 语句的条件表达式结果布尔值为假,那么程序将执行 else 语句后的代码。

if-elif-else语句

if expression1:
    expr1_true_suite
elif expression2:
    expr2_true_suite
    .
    .
elif expressionN:
    exprN_true_suite
else:
    expr_false_suite
  • 经常需要检查超过两个以上的情形,可以使用if-elif-else结构。python只执行if-elif-else结构中的一个代码块,依次检查每个条件测试,直到遇到通过了的条件测试,测试通过后,python将执行,跟随它后面的代码并跳过余下的测试。

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

assert 关键词

my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0
# AssertionError
  • assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。

循环结构

while 循环

while 布尔表达式:
    代码块
  • 循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。
  • for循环用于针对集合中的每个元素的一个代码块,而while循环不断的进行,直到指定的条件不满足为止。

while - else 循环

while 布尔表达式:
 代码块
else:
 代码块
  • 正常执行完循环,执行else。
  • 若是由于break语句跳出循环,则不执行else。

for 循环

for 迭代变量 in 可迭代对象:
    代码块
  • for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列。
  • 每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
  • 可迭代对象:有序序列数据(str、list、tuple、dict、iter迭代器)。
    其中dict迭代较为特殊。
for key, value in dict.items():   # items()返回键值对
for key in dict.key():            # keys()取出键
for value in dict.values():       # values()取出值

for - else 循环

for 迭代变量 in 可迭代对象:
 代码块
else:
 代码块
  • 正常执行完循环,执行else。
  • 若是由于break语句跳出循环,则不执行else。

range() 函数

range([start,] stop[, step=1])
  • 这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
  • step=1 表示第三个参数的默认值是1。
  • range 这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值。

enumerate()函数

enumerate(sequence, [start=0])
  • 返回一个迭代对象包含元素和新建的索引使用循坏可以查看。
  • sequence为可迭代对象,start为开始的下标,返回一个可迭代的元组结构(index, sequence[index])。
  • enumerate()与 for 循环的结合使用。
for i, a in enumerate(A)
    do something with a  

break 和 continue pass

  • break语句可以跳出当前所在层的循环。
  • continue终止本轮循环并开始下一轮循环。
  • break会跳出整个循坏,continue是不进行本次循坏之后的操作。
  • pass 不做任何操作。

推导式

# 列表推导式
[ expr for value in collection [if condition] ]
# 元组推导式
( expr for value in collection [if condition] )
# 字典推导式
{ key_expr: value_expr for value in collection [if condition] }
# 集合推导式
{ expr for value in collection [if condition] }        

练习

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

print([x for x in range(1500,2701) if x%7==0 and x%5==0])
#运行结果:[1505, 1540, 1575, 1610, 1645, 1680, 1715, 1750, 1785, 1820, 1855, 1890, 1925, 1960, 1995, 2030, 2065, 2100, 2135, 2170, 2205, 2240, 2275, 2310, 2345, 2380, 2415, 2450, 2485, 2520, 2555, 2590, 2625, 2660, 2695]

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

  • 将代码分为赛前数据准备部分,比赛中和判断结果。其中还需要统计兔子、乌龟实时路程和秒数,当实时路程小于预设路程时,则进入循环。经过运算得出比赛结果并输出。
# -*- coding: utf-8 -*-
#赛前数据准备部分:
v1, v2, t, s, l =map(int,input('输入v1, v2, t, s, l空格隔开:').split())
l1 = 0        #兔子实时路程
l2 = 0        #乌龟实时路程
Seconds = 0   #统计秒数
#比赛中:
while(l1 < l and l2 < l):
    l1 += v1 
    l2 += v2 
    Seconds += 1
    if l1 >= l or l2 >= l:
        break
    elif l1 >= l2 + t:
         l2  += v2 * s
         Seconds += s
#输出判断结果:
if l1 <l and l2 >=l:
    print('T')
elif l1 >= l and l2 <l:
    print('R')
else:
    print('D')
print(Seconds)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值