show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 这次了解了 elif
- elif 就是 else + if
- 可以构成多分支语句
- 不过在这个某些分支上
- 我想啥都不做
- 却出现了问题
- 能否做到啥都不做呢???🤔
- 问题就在于 num == 0 的时候
- 没有任何语句
- 我让他打印空字符串
- 并且最后也不要加换行
- 可以么?
- 可以倒是可以
- 但是其实我要的是啥都不干
- 但是他还是调用了 print 函数
- 能否完全啥也不干呢?
- 有这么一个关键字 pass
- 他的意思就是啥都不做
- 就像玩牌的时候
- 什么都不出
- 就是 pass 直接过
- 可以用么?
- 这样真的就可以啥都不用做
- 而且也通过
- 帮助手册里究竟是怎么说的呢?
- pass 是空运算
- 当被执行的时候
- 没有任何事情发生
- 他是有用的占位标志
- 当需要一个语句
- 但是并不做任何事的时候
- 就可以用 pass
- 甚至可以定义空的函数和类
- 但是就事论事
- 我们这个代码可以再优化
from random import randint
num = randint(1,10) - 5
if num > 0:
print("more than 0")
elif num < 0:
print("less than 0")
- 这样,首先引入随机
- 确保条件判断有意义
- 然后处理了两个条件
- 最后等于 0 的时候
- 自然什么也不做
- 也就相当于 pass
- pass 更多用在哪里呢?
- 比如原始程序是这样的
from random import randint
num = randint(1,10) - 5
if num > 0:
print("more than 0")
- 这肯定没有任何问题
- 但是如果我想注释掉满足条件时所执行的语句
from random import randint
num = randint(1,10) - 5
if num > 0:
#print("more than 0")
- 但是这个程序运行会直接报错
- 这是一个经典的错误
- 其实我们只需啊要加上 pass
- 程序逻辑不变,条件分支保留
- 而且也能执行了
from random import randint
num = randint(1,10) - 5
if num > 0:
#print("more than 0")
pass
- 这样我这个功能就完成了
- 而且啥都不干的位置就是啥都不干
- 这个程序现在是一个多分支
- 可以做成嵌套么?
- 可以,但没有必要
- 这种根据一个变量判断
- 能用一层条件解决的问题
- 没有必要用两层条件
- 那什么时候需要用嵌套呢?
- 比如面对两个变量
- 一个是我出的
- 还有一个是电脑随机出的
- 这个手势有相应代码吗?
- 这个是有的
- mac 的 iterm2 上可以用
- 可是目前 xfce 的 terminal 对于 emoji 还不支持
- 我们选择字符串元组来描述手势
- 然后讨论可能性
- 根据我的选择
- 三种可能性
- 每种可能性下
- 电脑还有三种可能性
- 可以完成程序
- 不过这个程序有点复杂
- 可以简化一下吗?
- 首先如果相等,肯定是平局
- 先把三种可能性合并
- 然后再对手势分类讨论
- 不过这个代码中有一个小瑕疵
- 可以优化的
- 你可以看出来吗?
from random import randint
hands = ("Rock","Scissors","Paper")
choice = int(input("input(O:Rock,1:Scissors,2:Paper):"))
computer = randint(0,2)
print("you:",hands[choice]," ; computer:",hands[computer])
if choice == computer:
print("draw!")
else:
if choice == 0:
if computer == 1:
print("you win")
else:
print("you lose")
elif choice == 1:
if computer == 0:
print("you lose")
else:
print("you win")
else:
if computer == 0:
print("you win")
elif computer == 1:
print("you lose")
- 其实主要是如果出手相同
- 原来代码还需要进入下面一大长串的判断
- 新代码由于 else 的存在
- 会节省一点点时间和能源
- 但是这个东西容错性不好
- 我怎么知道输入的能否转化为 0、1、2 呢?
from random import randint
hands = ("Rock","Scissors","Paper")
s_hand = input("input(O:Rock,1:Scissors,2:Paper):")
if s_hand not in ['0', '1', '2']:
print("not proper choice!exit!")
exit()
choice = int(s_hand)
computer = randint(0,2)
print("you:",hands[choice]," ; computer:",hands[computer])
if choice == computer:
print("draw!")
else:
if choice == 0:
if computer == 1:
print("you win")
else:
print("you lose")
elif choice == 1:
if computer == 0:
print("you lose")
else:
print("you win")
else:
if computer == 0:
print("you win")
elif computer == 1:
print("you lose")
- 这样就让程序更加健壮
- 提高了 Robustness
- 翻译叫做鲁棒性
- 这个词是我们从日本间接获取的
- 而且报错信息更加明确了
- 这次完成了综合案例 - 猜丁壳
- 猜丁壳中有两个变量
- 你的选择
- 电脑的选择
- 这样就构成了嵌套的条件结构
- 一般来说这种条件结构无法转化为多分支
- 是不是绝对无法转化为多分支呢???🤔
- 下次再说 👋