前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Datawhale组队学习 -- Task 2:条件循环结构

Datawhale组队学习 -- Task 2:条件循环结构

作者头像
余生大大
发布2022-11-02 14:58:39
3520
发布2022-11-02 14:58:39
举报
文章被收录于专栏:余生大大

1. 条件语句

  • 概念

判断语句的关键词就三个,if、elif、else,跟java的语句没有区别。

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

代码

代码语言:javascript
复制
# 定义一个变量来进行判断
num = 2;
# if语句
if num > 1:
    print("进入if了  -- 1")
# if elif语句
if num > 2:
    print("进入if了  -- 2")
elif num > 1:
    print("进入elif了  -- 2")
# if elif else语句
if num > 2:
    print("进入if了  -- 3")
elif num > 3:
    print("进入elif了  -- 3")
else:
    print("都不符合条件只能到我了  -- 3")
# assert关键字
assert num > 2

print("结束咯,没报错")

结果

因为num > 2不成立程序自动崩溃并抛出AssertionError的异常。

设置num > 1

2. 循环语句

while循环

概念

  • while循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。
  • 数值类型:如果while的数值为0则假停止循环,否则继续
  • str、list和其他序列:如果长度为0则假停止循环,否则继续

代码

代码语言:javascript
复制
# 数值循环每次减一
num = 5;
while num:
    print(num)
    num = num-1
# str类型每次截一个char
strs = 'Hello'
while strs:
    print(strs)
    strs = strs[1:]
# while结合if
count = 0
while count < 3:
    temp = input("不妨猜一下小哥哥现在心里想的是那个数字:")
    guess = int(temp) # 转换类型为int
    if guess > 8: # 判断值是否大于8
        print("大了,大了")
    elif guess == 8: # 判断值正确定义count = 3结束
        print("你是小哥哥心里的蛔虫吗?")
        print("哼,猜对也没有奖励!")
        count = 3
    else: # 
        print("小了,小了")
    count = count + 1
    if count == 3: # 如果3次都没成功就跳出循环
        break
else:
    print("你成功通过,厉害")
print("游戏结束,不玩儿啦!")

for循环

概念

  • for循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict
  • for可以直接将对象分解按顺序得到对象位数值,也可以得到序列位数让序列拿位数取值

代码

代码语言:javascript
复制
member = ['张三', '李四', '刘德华', '刘六', '周润发']
# 直接拿到数据
for each in member:
    print(each)
# 拿到数组位数,数组去拿值
for i in range(len(member)):
    print(member[i] + " 在第"+str(i)+"位")
    
# 键值对方式,如果都取数据用.items()
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key,value in dic.items():
    print(key, value, end=' ')
# 单项数据用.keys()或者.values()
for key in dic.keys():
    print(key, end=' ')

# 结合else,跟之前的while-else一样,无break异常跳出就执行else的代码
for i in range(len(member)):
    if i > 11:
        break
    print(member[i] + " 在第"+str(i)+"位")
else:
    print("正常执行咯,嘿嘿")

range() 函数

概念

  • range 这个函数的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列,该序列包含start的值但不包含stop的值。
  • 第一个参数是开始值,第二个是结束值,第三个是跳越值

代码

代码语言:javascript
复制
# 定义一个从2到14的数组,range函数包前不包后
num = range(2,10) 
# 循环
for i in num:  
    print(i)

# 定义一个从1到22的数组,并且每次+2(第三位参数的意义)
num = range(1,22,2)
for i in num:  
    print("余生大大" + str(i))

enumerate() 函数

概念

  • 返回了函数内的元素,还顺便给该元素一个索引值 (默认从 0 开始),可以设置开始。

代码

代码语言:javascript
复制
languages = ['Python', 'R', 'Matlab', 'C++']
for i,v in enumerate(languages,2): # 返回languages数组元素并设置下标开始值为2
    print(v, i)

break和continue 

概念

  • break语句可以跳出当前所在层的循环。
  • continue终止本轮循环并开始下一轮循环。

代码

代码语言:javascript
复制
i = 5;
while(i):
    # 如果为3则continue跳出本次循环不输出
    if i == 3:
        i = i-1
        continue 
    # 如果为1直接break停止循环
    if i == 1:
        break
    print(i)
    i = i-1

pass 语句

概念

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

代码

代码语言:javascript
复制
if 1 > 2:
    pass

推导式

概念

  • 列表推导式:将输出格式设置为[ ]则为列表推导式
  • 元祖推导式:将输出格式设置为( )则为列表推导式
  • 字典推导式:将输出格式设置为键值对则为字典推导式
  • 集合推导式:将输出格式设置为{ }则为集合推导式

代码

代码语言:javascript
复制
# 列表推导式
x = [i ** 2 for i in range(1, 10)]
print(x)
# 元组推导式
a = (x for x in range(10))
print(a)
# 字典推导式
b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# 集合推导式
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)

练习题

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

代码语言:javascript
复制
x = [i for i in range(1500,2700) if (i % 5) == 0 and (i % 7) == 0]
print(x)

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”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

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

代码语言:javascript
复制
v1 = 0 # 兔子的位置
v2 = 0 # 乌龟的位置
vv1 = 10 # 兔子的速度
vv2 = 5 # 乌龟的速度
t = 5 # 兔子领先的米数
s = 2 # 休眠的秒数
sf = 0; # 兔子正在休眠秒数
l = 20 # 赛道长度
num = 0;# 秒数
state = 1; 
while state: 
    print(v1,v2)
    if (v1 >= l):
        state = 0
        print("兔子赢了")
    elif (v2 >= l):
        state = 0
        print("乌龟赢了")
    v = v2
    v2 = v2 + vv2
    num = num + 1; # 秒数+1
    if (v1 - v) >= 5:
        sf = s
        if sf > 0:
            sf = sf-1
            compile
    elif sf > 0:
        sf = sf-1
        compile
    else:
        v1 = v1 + vv1   
print("耗费时间",num,"秒")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 条件语句
  • 2. 循环语句
  • 练习题:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档