Python学习笔记2:条件循环结构

一、 条件语句

Python使用缩进而不是大括号来标记代码块边界,因此要注意书写格式。

1. if 语句

if condition:
     print('True')

当 if 后的条件为真时才执行后面的操作,否则执行下一个代码块。
if 语句可嵌套

if condition1:
    if condition2:
        print('Right')

2. if - else 语句

if condition:
    print('True')
else:
    print('False')

3. if - elif - else 语句

elif 即 else if,可用于判断多个表达式

if condition1:
    print('a')
elif condition2:
    print('b')
elif condition3:
    print('c')
else condition4:
    print('d')

4. assert 关键词

当 assert 后的条件为 False 时,程序自动崩溃并抛出异常AssertionError。可作为检查点,只有当条件为真时程序才能正常工作。

assert 1>2
# AssertionError

二、循环语句

1. while 循环

while 后可跟布尔表达式、数值、str、list序列等,当 while 后的条件为真时执行循环体,否则不执行循环体。
以下情况可视为真:
布尔表达式为真、数值不为0 或 序列长度非零

num=3
while num>0:
     print(num)
     num=num-1
# 3
# 2
# 1

2. while - else 循环

当 while 循环正常执行完的情况下,执行 else 内的操作,若 while 循环在执行中遇到跳出循环语句(如:break),则不执行 else 的内容。

while condition1:
     do...
else:
     do...

3. for 循环

for 循环是迭代循环,可遍历任何可迭代的对象。

for 迭代变量 in 可迭代对象:
    do...

每次循环,迭代变量被设置为可迭代对象的当前元素。

word=['a','b','c']
for i in word:
    print(i,end' ')
# a b c

4. for - else 循环

与 while - else 循环语句一样,当for循环正常执行完时,执行else的内容。若for循环在执行中遇到跳出语句(如:break),则不执行else的内容。

for 迭代变量 in 可迭代对象:
    do...
else:
    do...

5. range()函数

range([start,] stop[,step=1])

生成一个从start开始,从stop结束(不包括stop)的数字序列,step表示间隔,默认值为1。

for i in range(1,10,2):
    print(i)

# 1
# 3
# 5
# 7
# 9

6. enumerate()函数

enumerate(A):一 一返回A的元素。
enumerate(A,j ):不仅返回A中的元素,还可以给元素设置起始值为 j 的索引值。

word=['a','b','c']
lst=list(enumerate(word,start=1))
print(lst)
# [(1,'a'),(2,'b'),(3,'c')]

enumerate() 与 for 循环

word=['a','b','c']
for i, w in enumerate(word,1):
    print(i,'This is',w)
# 1 This is a
# 2 This is b
# 3 This is c

7. break、continue 语句

break :跳出当前所在层的循环。
continue :终止本轮循环并执行下一轮循环。

num=[3,4,8,9]
for i in num:
    if i%2==0:
       print(i)
       break
    print('find')
# find
# 4

for i in num:
    if i%2==0:
       print(i)
       continue
    print('find')
# find
# 4
# 8
# find

8. pass 语句

pass:空语句,不做任何操作。若在需要有语句的地方不写任何语句,则解释器会提示出错,此时可用pass语句解决。

def fun():
# SyntaxError: unexpected EOF while parsing

def fun():
    pass

9. 推导式

(1).列表推导式

[expr for value in collection [if condition] ]

示例:

x=[1,2,3,4,5,6]
y=[i*2 for i in x if i%2==0]
print(y)
# [4,8,12]

x=[1,2,3]
y=[4,5,6]
z=[(i,j) for i in x for j in y]
print(z)
# [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

(2).元组推导式

( expr for value in collection [if condition] )

示例:

x=(i*2 for i in range(5))
print(x)
# <generator object <genexpr> at 0x000001966751B660>
print(tuple(x))
# (0, 2, 4, 6, 8)

(3).集合推导式

{ expr for value in collection [if condition] }

示例:

x=[2,4,8]
y={i**2 for i in x}
print(y)
# {16, 64, 4}

(4).字典推导式

{ key: value for value in collection [if condition] }

示例:

num=[1,2,3,4,5]
x={i:i%2==0 for i in num}
print(x)
# {1: False, 2: True, 3: False, 4: True, 5: False}

练习题

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

x=range(1500,2700)
y=[i for i in x if i%7==0 and i%5==0]
print(y)
# [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、龟兔赛跑游戏
题目描述:
世界上各个角落都不断在发生着乌龟和兔子的比赛,小华研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但在与乌龟的比赛中,一旦任1秒结束后兔子发现自己领先 t 米或以 上,它们就会停下来休息 s 秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。

小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度 v1(m/s),乌龟的速度 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

import numpy
from numpy import *
v1,v2,t,s,l=map(lambda x:int(x),input('please input v1,v2,t,s,l:').split())
T2=l/v2
k,l1,T0=0,0,0
while l1<l:
    if l1-v2*T0>=t:
        T0+=s
        k+=1
    else:
        T0+=1
    l1=v1*(T0-k*s)
    if T0>T2:
        print('T',T2,sep='\n')
        break
    elif T0==T2:
        if l1==l:
            print('D',T0,sep='\n')
            break
else:
    print('R',T0,sep='\n')    

# 输出结果:
>>>
==============================
please input v1,v2,t,s,l:10 5 5 2 20
D
4
>>> 
==============================
please input v1,v2,t,s,l:10 5 5 3 20
T
4.0
>>> 
==============================
please input v1,v2,t,s,l:10 5 5 1 20
R
3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值