python训练营Task02【条件语句&循环语句】

一、学习内容概要

目录

一、学习内容概要

二、学习内容

03、条件语句

1.if 语句

2.if-else语句

3. if - elif - else 语句

4. assert 关键词

04、循环语句

扫描二维码关注公众号,回复: 13397978 查看本文章

1. while 循环

1. while 循环

2. while - else 循环

3. for 循环

4. for - else 循环

5. range() 函数

6. enumerate()函数

7. break 语句

8. continue 语句

9. pass 语句

10.推导式

A.列表推倒式

B.元组推导式

C.字典推导式

D.集合推导式

练习题:

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

2、龟兔赛跑游戏

三、学习感悟


二、学习内容

03、条件语句

1.if 语句

 if  语句正如 if 的中文意思一样,表示“如果”,因此 if 语句也常叫做 if 判断语句。

2.if-else语句

基本语法结构为

if   判断语句

        执行语句1:   

else     

        执行语句2 :

(注意不要忘记英文格式的冒号)

以下的代码运行错误,知道在哪里出错吗?

#找出较大数#

a = 10;
b = 20;

if(a > b) :

print("较大数:" + a);

else: 

print("较大数:" + b);


注意:

1、python是一种严格依赖缩进的语言,如果缩进不正确或缩进格式不统一,就会报错。
所谓缩进不正确,python的缩进是四个空格或一个TAB,如果缩进三个空格,一定报错
所谓缩进格式,即不能空格和TAB混用。

2、缩进之后,依然会发现报错。这里的原因是

Python无法判断变量a的值 10 是数值 10 还是字符 1和0 。因此在字符串中使用整数时,需要显式地指出希望将这个整数用作字符串。

因此,可以调用 str() ,如下图,就可以解决问题。

a = 10;
b = 20;

if(a > b) :

    print("较大数:" + str(a))

else: 

    print("较大数:" + str(b))


#20

if语句支持嵌套,即在一个if语句中嵌入另一个if语句,从而构成不同层次的选择结构。Python 使用缩进而不是大括号来标记代码块边界,因此要特别注意else的悬挂问题。

                                                                    猜数字游戏

#引入生成随机数的模块
import random
#程序设定生成 1-20 之间的一个随机数,让用户猜
secretNum = random.randint(1,20)
print("这是一个位于 1-20 之间的数")
#设定用户只能猜 3 次
for number in range(1,4):
    print("请输入猜测的数:")
    guess = int(input())
    if guess == 0:
        print("输入数范围有误")
        break
    if guess < secretNum:
        print("太小啦")
    elif guess > secretNum:
        print("太大啦")
    else:
        break
if(guess == secretNum):
    print("真厉害,猜对啦,就是"+str(guess))
else:
    print("很遗憾,正确答案是"+str(secretNum))

3. if - elif - else 语句

语法结构

if 判断条件:

  执行语句1

elif 判断条件:

  执行语句2

...

...

else:

  执行语句n

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

else语句类似,elif语句是可选的。 但是,与else语句不同的是,else语句最多可以有一个语句,在if之后可以有任意数量的elif语句。

#乱敲的一段代码。。。,练练手感
a = 1;
b = 2;
c = 3;
if(a > b):
    print(a)
else:
    print(b);
    
    
if(a > b):
    print(b)
elif(a > c):
    print(c);
else:
    print(a)

4. assert 关键词

  • assert这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssertionError的异常。

  • 在进行单元测试时,可以用使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

  • 来在程序中置入检查点,只有条件为 True 才能让程序正常工作。

  • 使用assert是学习python的一个非常好的习惯,在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行时崩溃,不如在出现错误条件时就崩溃。

python提供了两个非常重要的功能来处理Python程序中的异常和错误,并在其中添加调试的函数功能 

assertionerror python_Python异常处理(二十六)_powerelectricdog的博客-CSDN博客

04、循环语句

1. while 循环

1. while 循环

语句结构

while 布尔表达式:
    代码块

while循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。

#输出1 到 9
i = 1
while i < 10:
    print(i)
    i += 1
'''
1
2
3
4
5
6
7
8
9

'''

while死循环

i = 1
while True:
    print(i)
    i += 1



#按CTRL+C可以强制停止

2. while - else 循环

语句结构

while 表达式:
         执行语句1

        else:
         执行语句2

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

3. for 循环

for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict

#输出1到9
i = 1
for i in range(1,10):
    print(i)
'''
1
2
3
4
5
6
7
8
9
'''

4. for - else 循环

语句结构

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

for else语句可以总结成以下话。
如果我依次做完了所有的事情(for正常结束),我就去做其他事(执行else),若做到一半就停下来不做了(中途遇到break),我就不去做其他事了(不执行else)。

list = [1,2,3,4,5]
for x in list:
    print(x)
else:
    print("结束")
'''
1
2
3
4
5
结束
'''

5. range() 函数

range() 函数可创建一个整数列表,时python的 内置函数

range(10)表示从0到9

#输出1到9
i = 1
for i in range(10):
    print(i)
'''
1
2
3
4
5
6
7
8
9
'''

6. enumerate()函数

语法结构

enumerate(sequence, [start=0])

默认从0开始

enumerate是枚举、列举的意思

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

上述方法有些累赘,利用enumerate()会更加直接和优美:

enumerate还可以接收第二个参数,用于指定索引起始值,如:

enumerate多用于在for循环中得到计数

语句结构

for i, a in enumerate(A)
    do something with a  

7. break 语句

break语句可以跳出当前所在层的循环。

8. continue 语句

continue终止本轮循环并开始下一轮循环。

9. pass 语句

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

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

10.推导式

详细介绍看这篇文章

Python推导式(列表推导式、元组推导式、字典推导式和集合推导式)详解 (biancheng.net)

A.列表推倒式

语句格式

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

list1= range(10)

# 对 list1 执行for表达式

list2 = [a*a for a in list1]

# list2 集合包含10个元素

print(list2)

'''
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'''

B.元组推导式

语句结构

(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )


通过和列表推导式做对比,你会发现,除了元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。不仅如此,元组推导式和列表推导式的用法也完全相同。

list1= range(10)

# 对 list1 执行for表达式

list2 = (a**2 for a in list1)

# list2 集合包含10个元素

print(list2)





#<generator object <genexpr> at 0x0000021B1A200FC0>

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,这一点和列表推导式是不同的。

如果我们想要使用元组推导式获得新元组或新元组中的元素,有以下三种方式:

  1. 使用 tuple() 函数,可以直接将生成器对象转换成元组:
    list1= range(10)
    
    # 对 list1 执行for表达式
    
    list2 = (a**2 for a in list1)
    
    # list2 集合包含10个元素
    
    print(tuple(list2))
    
    #(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)

  2. 直接使用 for 循环遍历生成器对象,可以获得各个元素
     
  3. 使用 __next__() 方法遍历生成器对象,也可以获得各个元素

C.字典推导式

语句结构

{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}

可以看到,和其它推导式的语法格式相比,唯一不同在于,字典推导式用的是大括号{}。

D.集合推导式

语句结构

集合推导式的语法格式和字典推导式完全相同,如下所示:

{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

练习题

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

for i in range(1500,2701):
    if i % 5 == 0 and i % 7 == 0:
        print(i)
'''
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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

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

三、学习感悟

今天的学习内容有点多,我已经略感吃力,不过好在有小伙伴的帮助和搜索工具,帮助我解决困惑,这样的学习状态和过程真的很快乐,希望在接下来的时间,我依旧可以跟上节奏。fighting!

猜你喜欢

转载自blog.csdn.net/m0_49210538/article/details/121531600