流程控制语句

流程控制语句

编程语言一般有三大执行顺序: 顺序执行, 选择执行, 循环执行

顺序执行

程序自上而下逐句执行, 即为顺序执行

选择执行

语法:

```
if 条件1:
	执行代码块
elif 条件2:
	执行代码块
...
else:
	执行代码块
```python

规则:

  • 执行第一个条件为True的分支语句, 如果条件都为False, 那么执行else里的代码块

  • elif和else是可不写的, 但每一个elif和else都要存在if与之匹

循环结构

while循环

语法:

```
	while 条件:
		代码块
	else:
		代码块
```

规则:

  • 如果条件满足, 则while内的代码块会一直执行, 直到条件不满足, 或者执行break
  • else是可选的, 如果while未被break则会执行该段代码

for循环

语法:
for x in 可迭代对象: 代码块 else: 代码块
for会遍历可迭代对象的所有元素, 如果执行中未遇见break, 那么for执行完成后, 会执行else里的代码块

其他流程控制语句

  1. break
    可以直接跳出自己所在的循环
  2. continue
    结束本次循环, 回到while或for语句开始新的循环
  3. assert
    断言: assert 条件
    规则: 如果条件为True, 那么会继续执行, 如果为False, 那么程序直接抛出异常AssertionError
  4. pass
    什么都不做, 相当于占位符

ranage()函数

函数: range([start], end, [step=1])
解释: 生成一个从start(默认为0), 到end的步长为step(默认为1)的数字序列(可迭代对象), 可以用于for遍历

enumerate()函数

函数: enumerate(sequence, [start=0])
作用: 生成一个元组集合, 每个元组有两个元素, 第一个元素是该元素的下表, 第二个元素是其本身, 可以同个该方法获得元素下标

推导式

生成一个集合的简写形式

列表推导式

语法: [expr for value in collection [if condition]]
作用: 生成一个列表, 该列表内含有集合collection内(满足条件)的元素

元组推导式

  • 与列表推导式相同
  • 元组需要使用()包裹

字典推导式

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

  • key_expr和value_expr是有关(也可以无关)value的表达式
  • 通过取出collection中(满足条件的)元素, 来生成一个字典

集合推导式

  • 与列表推导式相同
  • 集合需要用{}包裹
  • 由于集合里不会出现重复元素, 所以推导式里的出现的重复元素不会加入到集合中

练习题

		def demo():
			i = 1500
			while i <= 2700:
				if i % 7 == 0:
					print(i)
				i += 5
  1. 方法1: 暴力循环
		def race(v1, v2, t, s, l):
			# 这里判断兔子在第一次休息之前, 是否到达终点
			t1 = t / (v1 - v2)
			if t1 * v1 >= l:
        		print("R")
        		print(l / v1)
			# 由于每次兔子都会在超过一定距离在休息一段时间, 在反超, 此种情况循环往复, 直至达到终点
			i = 1
			while True:
        		t1 += (s + ((v2 * s) - t) / (v1 - v2))
				# 如果乌龟先到
        		if t1 * v2 > l:
            		print("T")
            		print(l / v2)
            		break
				# 如果双方同时到
        		if t1 * v2 == l:
            		print("D")
            		print(t1)
            		break
        		t1 += (t / (v1 - v2))
				# 如果兔子先到
        		if (t1 * v2) + t > l:
           			print("R")
            		print(l / v1 + i * s)
            		break
				# 双方到没到, 进入下次循环
        		i += 1

方法2:

		def race(v1, v2, t, s, l):
    		# len = v2 * ((s * v2) / (v1 - v2) + t / v2)
    		# 如果兔子休息完, 乌龟都没能追上兔子
    		if t > s * v2:
        		print("R")
        		len1 = (t / (v1 - v2)) * v1
        		len2 = s * v2 / (v1 - v2) * v1
        		t1 = t / (v1 - v2)
       			# 如果兔子第一次休息前, 就到达终点
        		if len1 > l:
            	print(l / v1)
        		# 由于每个周期兔子都会移动相同距离, 直致到达终点, 可以利用求模与求余计算时间
        		else:
            		i = (l - len1) % len2
            		j = (l - len1) // len2 + 1
            		print((i / v1) + t1 + j * s)
    		# 如果乌龟能追上了兔子
    		else:
        	# 因为一个周期内只存在三种情况
        	# 1. 兔子在前, 乌龟在后
        	# 2. 乌龟在前, 兔子在后
        	# 3. 兔子追上乌龟, 开始新的周期
        	# 因此可以根据周期性, 对总路段求模, 得到的路段如果在某个区间, 则可推出兔子或则乌龟或者两者胜利, 可以利用地板除计算胜利者所用时间
        		len = (s * v1 / (v1 - v2)) * v2
        		len1 = (t / (v1 - v2) + t / v2) * v2
        		len2 = len - len1
        		i = l % len
        		j = l // len
        		if i == 0:
            		print("D")
            		print(l / v2)
        		elif i <= len1:
            		print("R")
            		print(l / v1 + j * s)
        		else:
            		print("T")
            		print(l / v2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值