[PYTHON学习]03条件语句、04循环语句

本文详细介绍了Python中的条件语句,包括if、if-else、if-elif-else,以及assert断言语句。同时,文章还涵盖了循环语句,如while循环、for循环、while-else和for-else,讲解了range()和enumerate()函数的用法,以及break、continue和pass语句。最后提到了推导式在列表、元组、字典和集合中的应用,并给出了两个编程作业示例。
摘要由CSDN通过智能技术生成

1条件语句

1.1 if语句

if expression:
    expr_true_suite
  • 只有if语句里的代码块为真时,才会执行代码。否则执行紧跟在后面的语句
  • if后面的expression表达式可以有and,or或者nor等实现多重的判断

2.2 if-else语句

if expression:
    expr_true_suite
else:
    expr_false_suite
  • python中if搭配使用的else,作为if语句条件表达结果为假是所要执行的语句。
  • if语句是支持嵌套的。即if中还可以再加一个语句,从而构成层次上的选择结构。
  • Python 使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题。

1.3 if-elif-else 语句

if expression1:
    expr1_true_suite
elif expression2:
    expr2_true_suite
    .
    .
elif expressionN:
    exprN_true_suite
else:
    expr_false_suite
  • elif语句即为else if。这里可以有多个elif,来检查多个表达式是否为真。最后一个写else。

1.4 assert关键词

也叫断言语句。

my_list = ['lsgogroup']
my_list.pop(0)
assert len(my_list) > 0

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

2循环语句

2.1 while循环

while 布尔表达式:
    代码块

布尔表达式来判断是否构成循环的条件。
如果一直符合,则会一直执行代码块中的内容。知道布尔表达式的值为假,会跳出循环

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

2.2 while-else 循环

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

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

2.3 for循环

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

2.4 for-else 循环

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

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

2.5 range()函数

range([start,] stop[, step=1]
  • 三个参数:中括号表示可选。
  • step=1表示第三个参数的默认值=1
  • 生成一个数字序列,从start参数值开始到stop参数值结束。注意:包括start的值但不包括stop的值。
  • step表示步伐大小,比如step=2
for i in range(1, 10, 2):
    print(i)

# 1
# 3
# 5
# 7
# 9

2.6 enumerate()函数

enumerate(sequence, [start=0])
  • sequence表示一个序列、迭或者其他支持迭代对象
  • start表示下标起始位置。
  • 返回enumerate(枚举)对象
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

用 enumerate(A) 不仅返回了 A 中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用 enumerate(A, j) 还可以确定索引起始值为 j

#-默认为0
for i, language in enumerate(languages):
    print(i, 'I love', language)
print('Done!')
'''
0 I love Python
1 I love R
2 I love Matlab
3 I love C++
Done!
'''

#j=2
for i, language in enumerate(languages, 2):
    print(i, 'I love', language)
print('Done!')
'''
2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done!
'''

2.7 break语句和continue语句

  • break语句可以跳出当前所在层的循环
  • continue终止本轮循环并开始下一轮循环
count=1
while 0<count<3:
    print("yes")
    count+=1
    if count==count:
        print('here')
else:
    print("no")
print('over')
#正常循环:yes here yes here no over

#continue语句
count=1
while 0<count<3:
    print("yes")
    count+=1
    continue
    if count==count:
        print('here')
else:
    print("no")
print('over')
#yes yes no over

#break语句
count=1
while 0<count<3:
    print("yes")
    count+=1
    break
    if count==count:
        print('here')
else:
    print("no")
print('over')
#yes over

2.8 pass语句

pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。

def a_func():

# SyntaxError: unexpected EOF while parsing

##上面什么都不写会出错,pass是为了解决这个问题的,改为:
def a_func():
    pass

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

2.9推导式

  • 列表推导式[ 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之间

for i in range(1500,2701):
    if i%7==0 and i%5==0:
        print(i)
    else:
        continue

练习题1-输出结果

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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。
第二行输出一个正整数:表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。

注:不太能写得来 有借鉴

data = list(map(int, input().split()))

Rabbit = data[0]  # 兔子的速度v1
Turtle = data[1] # 乌龟的速度v2
excelDistance = data[2] # 兔子对应的t
sleepTime = data[3] # 兔子对应的s
objectDistance = data[4] #赛道的长度l

time = TL = RL =  0

while True:
    if RL - TL >= excelDistance:
        for i in range(sleepTime):
            TL += Turtle
            time += 1
            if TL >= objectDistance > RL:
                print("T")
                print(time)
                exit()
        # RL += 0
    else:
        RL += Rabbit
        TL += Turtle
        time += 1

    if RL >= objectDistance > TL:
        print("R")
        print(time)
        break
    elif TL >= objectDistance > RL:
        print("T")
        print(time)
        break
    elif RL == TL >= objectDistance:
        print("D")
        print(time)
        break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值