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

1. 条件语句

  • 概念

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

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

  • 代码
    # 定义一个变量来进行判断
    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则假停止循环,否则继续
    • 代码
      # 数值循环每次减一
      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可以直接将对象分解按顺序得到对象位数值,也可以得到序列位数让序列拿位数取值
    • 代码
      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的值。
      • 第一个参数是开始值,第二个是结束值,第三个是跳越值
    • 代码
      # 定义一个从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 开始),可以设置开始。
    • languages = ['Python', 'R', 'Matlab', 'C++']
      for i,v in enumerate(languages,2): # 返回languages数组元素并设置下标开始值为2
          print(v, i)
  • break和continue 
    • 概念

      • break语句可以跳出当前所在层的循环。
      • continue终止本轮循环并开始下一轮循环。
    • 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语句,让代码可以正常运行。
    • if 1 > 2:
          pass
  • 推导式
    • 概念
      • 列表推导式:将输出格式设置为[ ]则为列表推导式
      • 元祖推导式:将输出格式设置为( )则为列表推导式
      • 字典推导式:将输出格式设置为键值对则为字典推导式
      • 集合推导式:将输出格式设置为{ }则为集合推导式
    • # 列表推导式
      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之间。

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

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

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,"秒")

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余生大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值