p07_条件语句、循环语句、推导式

条件语句

格式一

if 判断条件:

执行语句…

格式二

if 判断条件:

执行语句…

else:

执行语句…

gender = '男'
if gender == '男':
print("男士请进")
print("这是男士专用洗手间...")
gender = "女"
if gender == '女': print("女士请进"); print("这是女士专用洗
手间...")

格式三

if 判断条件1:

执行语句1…

elif 判断条件2:

执行语句2…

elif 判断条件3:

执行语句3…

else:

执行语句4…

gender = '男'
if gender == '男':
print('男士请进')
else:
print('女士请进')
gender = input("请输入你的性别 (男/女): ")
if gender == "男":
print("男士请进")
elif gender == "女":
print("女士请进")
else:
print("输入错误!")
print("程序结束")

三元表达式

它是一个表达式,而不是一个结构化的代码块

score = float(input("请在下方输入你的考试分数:\n"))
if score >= 90 :
print("牛逼")
elif score >= 80 :
print("优秀")
elif score >= 60 :
print("可以")
# elif score < 60:
# print("同志仍需努力")
else:
print("同志仍需努力")
# 三元表达式
result = print("牛逼") if score >= 90 else print("优秀")
if score >= 80 else print("可以") if score >= 60 else
print("同志仍需努力")
print(result)  # None
if score >= 90 :
result = "牛逼"

if 语句嵌套

elif score >= 80 :
result = "优秀"
elif score >= 60 :
result = "可以"
else:
result = "同志仍需努力"
print(result)
# 三元表达式
result = "牛逼" if score >= 90 else "优秀" if score >= 80
else "可以" if score >= 60 else "同志仍需努力"
print(result)
print("老师说我" + ("牛逼" if score >= 90 else "优秀" if
score >= 80 else "可以" if score >= 60 else "同志仍需努
力"))
print("敲门声: 咣咣咣~")
gender = input("请输入你的性别 (男/女): ")
if gender == "男":
print("滚犊子...")
else:
answer = input("请问是不是包租婆? (是/不是): ")
if answer == '是':
print("屋里没人...")
else:

条件语句特点

每个条件语句只会满足一次结果

answer2 = input("请问是不是小姐姐? (是/不是): ")
if answer2 == '是':
print("请进, 你是找我的吗?")
else:
print("不好意思, 您找错人了...")
# 三元表达式嵌套(了解一下)
print("不好意思, 我今天不能见男的, 您请回吧") if input("请问你
是男是女 (男/女): ") == "男" else (print("不好意思, 今天我不
在家, 房租下次给你") if input("请问是包租婆吗? (是/不是): ")
== "是" else (print("小姐姐, 您好, 请进...") if input("请问
你是小姐姐吗? (是/不是): ") == "是" else print("不好意思, 我
今天不宜面圣, 您请回吧")))
num = 5
if num > 0 :  # 满足条件, 输出a, 后面就不会执行了
print("a")
elif num > 1 :
print("b")
elif num > 2 :
print("c")
elif num > 3 :
print("d")

当判断条件是一个值时,会对该值进行 bool 判断

else:
print(“e”)

if num > 4 :  # 然后又跳到这个条件语句中执行
print(“f”)

else:
print(“g”)

if 123456 :
print(“123456为True”)

if []:
print(“[]为True”)
else:
print(“[]为False”)

num = None

if num == None:  # num == None -> True
print(“123456”)

if None:
print(“123456”)

实现:石头剪刀布游戏

random 模块常用函数

random.random() 返回 [0.0, 1.0) 范围内的随机浮点数

random.randint(a, b) 返回 [a, b] 范围内的随机整数

random.uniform(a, b) 返回 [a, b] / [b, a] 范围内的随机浮点数

random.choice(seq) 从非空序列 seq 返回一个随机元素。 如果 seq

为空,则引发 IndexError

random.sample(population, k) 从序列或者集合中随机获取k个元

素,以列表形式返回

(Python3.9 版本, 集合中采样已弃用)

random.shuffle(x) 将可变序列 x 随机打乱位置

import random
INFO = { 0 : “石头”, 1 : “剪刀”, 2 : “布”}  # [“石头”, “剪刀”,
“布”]
computer = random.randint( 0 , 2 )
player = int(input("请出拳! 输入 0 代表石头、 1 代表剪刀、 2 代表
布: "))
# 展示电脑和玩家的出拳结果
print(f"电脑出拳: {INFO[computer]}\n玩家出拳:
{INFO[player]}")
# 判断谁输谁赢
if computer == player:
print("平局!")
elif player-computer in (- 1 , 2 ):
print("玩家胜利!")
else:
print("电脑胜利!")

random.randrange ([start,] stop [,step]) 等效于从 range(start, stop,

step) 里随机返回一个元素

random.seed ([x]) 起固定随机数的作用,x 可以是任意数字(x 可

以理解为种子的名字)

import random

# 返回 [0.0, 1.0) 范围内的随机浮点数

a = random.random()
print(a)

返回 [2, 4] 范围内的随机整数

a = random.randint( 2 , 4 )
print(a)

返回 [2.5, 3.5] 范围内的随机浮点数

a = random.uniform(2.5, 3.5)
a = random.uniform(3.5, 2.5)
print(a)

# 从序列返回一个随机元素

a = random.choice(range( 10 ))
print(a)

从序列中随机获取k个元素,以列表形式返回

a = random.sample((“a”, 1 , 2 , 3 , “b”), 2 )
print(a)

从集合中随机获取k个元素,以列表形式返回

a = random.sample({“a”, 1 , 2 , 3 , “b”}, 2 )
print(a)

将可变序列随机打乱位置

a = [ 1 , 2 , 3 , 4 , 5 ]

循环语句

random.shuffle(a)
print(a)
# 从[star, stop)范围按照step步长组成的数据范围里返回一个随机数
a = random.randrange(start= 2 , stop= 100 , step= 2 )
print(a)
# 设定好种子之后,每次执行程序随机数将是固定的
# 使用相同的随机数种子,生成的随机数值是一样的
print(random.random())
random.seed( 10 )
print("seed10:", random.random())
random.seed( 7 )
print("seed7:", random.random())
random.seed( 10 )
print("seed10:", random.random())

while 循环

格式: while 判断条件:

执行语句…

while True

无限循环(俗称:死循环),配合控制语句去限制循环次数

while … else

a = 1
while a < 4 :
print(a)  # 1 2 3
a += 1
a = 0
while True:
print("hello")
a += 1
if a == 3 :
break
count = 0
while count < 5 :
print(count, "小于5")
count = count + 1

else:
print(count, “大于或等于 5”)

count = 0

while count < 5 :
print(count, “小于5”)
count = count + 1

print(count, “大于或等于 5”)

count = 0

while True:
print(count, “小于5”)
count = count + 1
if count >= 5 :
break

else:
print(count, “大于或等于 5”)

count = 0

while True:
print(count, “小于5”)
count = count + 1
if count >= 5 :

while 循环嵌套

for 循环

for 变量 in 可迭代对象:

执行语句…

break
print(count, "大于或等于 5")
# 实现九九乘法表
right = 1
while right <= 9 :
left = 1
while left <= right:
print(f"{left}x{right}={left*right}", end="\t")
left += 1
print()
right += 1
str1 = "123ab"
lis1 = [ 1 , 2 , 3 , "a", "b"]
tup1 = ( 1 , 2 , 3 , "a", "b")
dic1 = {"one": 1 , "two": 2 }
set1 = { 3 , 2 , 4 , "a"}
for i in str1:
print(i)

for … in … else

for i in lis1:
print(i)
for i in tup1:
print(i)
for i in dic1:
print(i)
for i in set1:
print(i)
for i in [ 1 , 2 , 3 , 4 ]:
print(i)
if i > 2 :
break
else:
print( 5 )
for i in [ 1 , 2 , 3 , 4 ]:
print(i)
if i > 2 :
break
print( 5 )

for 循环嵌套

range([start], stop[, step])

返回一个按步骤生成的从start(包括)到stop(不包括)的整数序列,它是

不可变的序列

start:计数从 start 开始,默认是从 0 开始

stop:计数到 stop 结束,但不包括 stop

step:步长,默认为 1

range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用

固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保

存了 start, stop 和 step 值)

enumerate(iterable, start=0)

返回一个enumerate对象(迭代器)。迭代它会得到一个个的元组,

每个元组是索引(从start开始,默认为 0 )和索引对应iterable的值组

成的

# 实现九九乘法表
for right in range( 1 , 10 ):
for left in range( 1 , right+ 1 ):
print(f"{left}x{right}={left*right}", end="\t")
print()
print(list(range( 4 )))  # [0, 1, 2, 3]
print(list(range( 1 , 5 )))  # [1, 2, 3, 4]
print(list(range( 1 , 8 , 2 )))  # [1, 3, 5, 7]
print(list(range( 8 , 1 , - 2 )))  # [8, 6, 4, 2]

循环控制语句

break

终止所在的循环

continue

跳过当前,继续到循环位置

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
object1 = enumerate(seasons)  # <enumerate object at
0x000002A89E67E6C0>
print(list(object1))  # [(0, 'Spring'), (1, 'Summer'),
(2, 'Fall'), (3, 'Winter')]
object2 = enumerate(seasons, start= 1 ) # 设置开始迭代的索引
print(list(object2))  # [(1, 'Spring'), (2, 'Summer'),
(3, 'Fall'), (4, 'Winter')]
for _ in range( 3 ):
for _ in range( 4 ):
print("hello")
break

优化:石头剪刀布游戏

a = 0
while a <= 5 :
if a == 3 :
a += 1
continue
print(a)
a += 1
import random
INFO = { 0 : ‘石头’, 1 : ‘剪刀’, 2 : ‘布’}
while True:
count_p = 0
count_c = 0
for i in range( 1 , 4 ):
computer = random.choice(range( 3 ))
# 判定玩家的输入是否合理, 如果不合理重新输入
while (player := int(input('请出拳(0代表石头, 1代表
剪刀, 2代表布): '))) not in INFO:
print('您的输入有误, 请重新输入...')
# 出拳展示
print(f'电脑出拳: {INFO[computer]}')
print(f'玩家出拳: {INFO[player]}')
# 判断本局胜方

if computer == player:
print(f’第{i}把平局!‘)
elif computer - player in ( 1 , - 2 ):
print(f’第{i}把玩家胜!’)
count_p += 1
else:
print(f’第{i}把电脑胜!')
count_c += 1

如果有一方先赢两把, 就不需要再比了

if 2 in (count_c, count_p):
break

判断本轮胜方

if count_p == count_c:
print(‘本轮三局两胜平局!’)
elif count_p > count_c:
print(‘本轮三局两胜玩家胜!’)
else:
print(‘本轮三局两胜电脑胜!’)

# 判定玩家的输入是否合理, 如果不合理重新输入

while (ans := input('请问您是否需要继续游戏(Y/N): '))
not in (‘Y’, ‘y’, ‘N’, ‘n’):
print(‘您的输入有误, 请重新输入…’)

在玩家输入合理的前提下, 继续判定输入是否为N或者n

if ans in (‘N’, ‘n’):
print(‘游戏结束, 欢迎下次光临…’)
break

推导式

列表推导式

由一对方括号里面包含一个表达式,后面跟一个 for 子句,然后是零个或多个

for 或 if 子句组成,其结果将是一个新列表,由表达式依据后面的 for 和 if 子

句的内容进行求值计算而得出

嵌套的列表推导式

列表推导式中的初始表达式可以是任何表达式,包括另一个列表推导

squares = []
for x in range( 10 ):
squares.append(x** 2 )
squares = [x** 2 for x in range( 10 )]
result = [(x, y) for x in [ 1 , 2 , 3 ] for y in [ 3 , 1 , 4 ] if x
!= y]
result = []
for x in [ 1 , 2 , 3 ]:
for y in [ 3 , 1 , 4 ]:
if x != y:
result.append((x, y))

字典推导式

matrix = [[ 1 , 2 , 3 , 4 ],
[ 5 , 6 , 7 , 8 ],
[ 9 , 10 , 11 , 12 ]]
result = [[row[i] for row in matrix] for i in range( 4 )]
result = []
for i in range( 4 ):
result.append([row[i] for row in matrix])
result = []
for i in range( 4 ):
temp = []
for row in matrix:
temp.append(row[i])
result.append(temp)
dic = {x: x** 2 for x in range( 4 )}
print(dic)
dic = {x: x** 2 for x in range( 6 ) if x % 2 == 0 }
print(dic)
dic = {k: v for k, v in zip(( 1 , 2 , 3 ), ( 4 , 5 , 6 ))}
print(dic)

集合推导式

pass 语句

pass 是一个空操作, 当它被执行时, 什么都不发生。它适合当语法上需要一条语

句但并不需要执行任何代码时用来临时占位

set1 = {x** 2 for x in range( 4 )}
print(set1)
set1 = {x for x in 'abracadabra' if x not in 'abc'}
print(set1)
num = int(input("请输入一个数字: "))
if num < 100 :
pass
else:
pass
  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值