DW-Python-Task02:条件循环结构

1.条件语句

1.1 if语句

注意点:

  • 缩进用四个空格不要用Tab
  • if elif else后面都要跟:

1.2assert关键词

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

assert 3 > 7

# AssertionError

2.循环语句

2.1 while循环

while-else循环

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

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

2.2 for循环

for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。
每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。
遍历dict的例子:

dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

for key, value in dic.items():
    print(key, value, sep=':', end=' ')
    
# a:1 b:2 c:3 d:4 
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

for key in dic.keys():
    print(key, end=' ')
    
# a b c d 
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

for value in dic.values():
    print(value, end=' ')
    
# 1 2 3 4

注:遍历键就用dic.keys(),遍历值就用dic.values(),遍历键和值就用dic.items()

for-else循环

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

2.3 range()函数

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

2.4 enumerate()函数

enumerate(sequence, [start=0])
  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start – 下标起始位置。
  • 返回 enumerate(枚举) 对象
    eg:
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
#返回元组数组
lst = list(enumerate(seasons, start=1))  # 下标从 1 开始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
  • enumerate()与 for 循环的结合使用
for i, a in enumerate(A)
    do something with a  
#i,a的变量名不影响,前面的代表索引值也就是元组的第0个元素,后面的代表元组的第1个元素

2.5 break,continue语句

break语句跳出最内层循环,注意,不跳出条件语句。
continue同理,终止最内层本轮循环,不跳出条件语句。

2.6 pass语句

pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。
pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行。
eg:

def a_func():

# SyntaxError: unexpected EOF while parsing


def a_func():
    pass

2.7 推导式

2.7.1 列表推导式

[ expr for value in collection [if condition] ]#if语句可有可无

eg:

  • 有if
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x)

# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
  • 有多个for语句在前面的为外层循环
a = [(i, j) for i in range(0, 3) for j in range(0, 3)]
print(a)

# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
#返回的数组中(0, 0), (0, 1), (0, 2)是前三个,说明在前面的for确实为外层循环

2.7.2 元组推导式

规则同数组推导式

2.7.3 字典推导式

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

eg:

b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# {0: True, 3: False, 6: True, 9: False}

2.7.4 集合推导式

{ expr for value in collection [if condition] }

规则同数组推导式,但是会舍去重复的元素
eg:

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

2.7.5 其他

  • 字符串不可用推导式
    eg:
d = 'i for i in "I Love Lsgogroup"'
print(d)
# i for i in "I Love Lsgogroup"

3.练习题

  1. 编写一个Python程序来查找那些既可以被7整除又可以被5整除的数字,介于1500和2700之间。
for i in range(1500,2701):
    if not i % 7 and not i % 5:
        print(i)
  1. 龟兔赛跑游戏

题目描述:

话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

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

string_input = input('请输入v1,v2,t,s,l:')
v1,v2,t,s,l = (int(x) for x in string_input.split(' '))
time_turtle = l / v2
time_all = 0
length_rabbit = 0
length_turtle = 0
while length_turtle < l or length_rabbit < l:
    length_rabbit += (t-(length_rabbit - length_turtle))/(v1-v2) * v1
    time_all += (t-(length_rabbit - length_turtle))/(v1-v2) + s
    length_turtle = time_all * v2
time_rabbit = time_all - s - (length_rabbit -l) /v1
if length_turtle >=l and length_rabbit = l and length_rabbit < 1:
    print('R')
    print('%d'%time_rabbit)
else:
    if time_turtle < time_rabbit:
        print('T')
        print('%d'%time_turtle)
    elif time_turtle > time_rabbit:
        print('R')
        print('%d'%time_rabbit)
    else:
        print('D')
        print('%d'%time_turtle)

你可能感兴趣的:(DW-Python,python)