搬砖3、Python 分支结构

分支结构

应用场景

迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进入第二关,还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。

if语句的使用

在Python中,要构造分支结构可以使用ifelifelse关键字。所谓关键字就是有特殊含义的单词,像ifelse就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。

"""
用户身份验证

Version: 0.1
Author: YJW
"""
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
if username == 'admin' and password == '123456':
    print('身份验证成功!')
else:
    print('身份验证失败!')

需要说明的是和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格,建议大家不要使用制表键或者设置你的代码编辑工具自动将制表键变成4个空格

当然如果要构造出更多的分支,可以使用if...elif...else...结构或者嵌套的if...else...结构,下面的代码演示了如何利用多分支结构实现分段函数求值。

"""
分段函数求值

        3x - 5  (x > 1)
f(x) =  x + 2   (-1 <= x <= 1)
        5x + 3  (x < -1)

Version: 0.1
Author: YJW
"""

x = float(input('x = '))
if x > 1:
    y = 3 * x - 5
elif x >= -1:
    y = x + 2
else:
    y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))

当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if的内部构造出一个新的分支结构,同理elifelse中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。

"""
分段函数求值
		3x - 5	(x > 1)
f(x) =	x + 2	(-1 <= x <= 1)
		5x + 3	(x < -1)

Version: 0.1
Author: YJW
"""

x = float(input('x = '))
if x > 1:
    y = 3 * x - 5
else:
    if x >= -1:
        y = x + 2
    else:
        y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))

说明: 大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”,之所以提倡代码“扁平化”是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,所以能使用扁平化的结构时就不要使用嵌套。

练习

练习1:英制单位英寸与公制单位厘米互换。

参考答案:

"""
英制单位英寸和公制单位厘米互换

Version: 0.1
Author: YJW
"""
value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':
    print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':
    print('%f厘米 = %f英寸' % (value, value / 2.54))
else:
    print('请输入有效的单位')
练习2:百分制成绩转换为等级制成绩。

要求:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。

参考答案:

"""
百分制成绩转换为等级制成绩

Version: 0.1
Author: YJW
"""
score = float(input('请输入成绩: '))
if score >= 90:
    grade = 'A'
elif score >= 80:
    grade = 'B'
elif score >= 70:
    grade = 'C'
elif score >= 60:
    grade = 'D'
else:
    grade = 'E'
print('对应的等级是:', grade)
练习3:输入三条边长,如果能构成三角形就计算周长和面积。

参考答案:

"""
判断输入的边长能否构成三角形,如果能则计算出三角形的周长和面积

Version: 0.1
Author: YJW
"""
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
    print('周长: %f' % (a + b + c))
    p = (a + b + c) / 2
    area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
    print('面积: %f' % (area))
else:
    print('不能构成三角形')

说明: 上面使用的通过边长计算三角形面积的公式叫做海伦公式

学习例程

# import random
#
# username = "世龙"
# money = 0
# coupon = 0
# total = 200
#
# if 0 < total < 500:
#     quan1 = random.randint(1, 10)
#     quan2 = random.randint(1, 10)
#     quan3 = random.randint(1, 10)
#     coupon = quan1 + quan3 + quan3
#     print('优惠券金额为:%d', coupon)
# elif 500 < total < 2000:
#     coupon += (2 * 50)
#     recharge = input('%s,是否需要充值?(y/n)')
#     if recharge == 'y':
#         money += 1.1 * int(input('请输入充值金额:'))
#         print('代金券金额为:%d==账户余额为:%s' % (coupon, money))
# else:
#     print('充值金额为:%d==账户余额为:%s' % coupon % money)

# n = 1
# while n <= 10:
#     n += 1
#     print('-------->n=%d' % n)
# m = 50
# n = 1
#
# while n <= m:
#     if 0 == n % 3:
#         print('计算结果 此时 n = %d' % n)
#     n += 1
#
# n = 1
# sum = 0
# while n <= 10:
#     sum += n
#     print('计算结果 sum = %d,此时 n = %d' % (sum, n))
#     n += 1
# total = 0
# n = 0
# while True:
#     print('添加商品!!!!!!!!')
#     price = float(input('输入价格:'))
#     number = int(input('输入数量:'))
#     n += number
#     total += price * number
#     answer = input('当前共计 %d 件-------当前商品总额是%.2f-----是否继续添加商品(q表示退出)?' % (n, total))
#     if answer == 'q':
#         break
#
# print('执行结束~~~~~~~~~~~')

# 练习题

'''
产生一个随机数
可以猜多次,直到猜对位置,如果猜错了,适当给出提示“猜大了”还是猜小了

'''

# import random
#
# ran = random.randint(1, 50)
# print('可以猜(%d)!!!' % ran)
# count = 0
# while True:
#     guess = int(input('猜一个1~50之间的数据:'))
#     count += 1
#     # 猜对就结束
#     if guess == ran:
#         print('恭喜你猜对了!!!')
#         if count == 1:
#             print('运气爆棚,快去买彩票吧!!!')
#         elif 1 < count < 5:
#             print('运气太好了,快去买彩票吧!!!')
#         else:
#             print('呵呵,运气一般!!!')
#         break
#     elif guess > ran:
#         print('猜大了,请重新猜测!')
#     else:
#         print('猜小了,请重新猜测!')

# '''
# 猜拳游戏:3局两胜
# '''
# import random
#
# x = 0
# y = 0
# while True:
#     # 机器产生随机数1:石头;2:剪刀;3:布
#     random1 = random.randint(1, 3)
#
#     random2 = int(input('请输入猜拳数字:'))
#     while random2 > 3 or random2 < 1:
#         random2 = int(input('请重新输入猜拳数字:'))
#
#     print('电脑:%d~~~人类%d' % (random1, random2))
#     if random1 == random2:
#         print('打平了,重新输入')
#     elif abs(random1 - random2) == 1:
#         if random1 < random2:
#             x += 1
#             if x >= 2:
#                 print('电脑胜利了,人类太弱了!!!!')
#                 break
#         else:
#             y += 1
#             if y >= 2:
#                 print('人类胜利了,电脑太弱了!!!!')
#                 break
#     elif abs(random1 - random2) == 2:
#         if random1 < random2:
#             y += 1
#             if y >= 2:
#                 print('人类胜利了,电脑太弱了!!!!')
#                 break
#         else:
#             x += 1
#             if x >= 2:
#                 print('电脑胜利了,人类太弱了!!!!')
#                 break
#     else :
#         print('系统错误!!!!')
'''
for 循环
for i in range(n):
    循环体的内容
range(n):默认表示从零开始取值,到n-1结束
range(m,n):默认表示从m开始取值,到n-1结束,包前不包后
range(m,n,step):默认表示从m开始取值,到n-1结束,包前不包后,step,代表步长
'''
# sumdata = 0
# for i in range(1, 4, 1):
# else:如果for循环没有被打断,直到执行完结束了,就会执行else
#     sumdata = sumdata + i
#     print('----------->', sumdata)

# # 密码输入,三次锁定
# for i in range(0, 3, 1):
#     mima = input('请输入密码:')
#     if mima == '12345678':
#         print('密码正确,打开进入')
#         break
#     else:
#         print('用户名或者密码错误!')
# else:  # 只要程序for执行完了,就相当于未被打断(break),则执行else
#     # if i >= 2:
#     print('密码锁定,请尝试联系管理员!')


# n = 1
# while n <= 10:
#     n += 1
#     print('-------->n=%d' % n)
#     if n == 12:
#         break;
# else:
#     print('--------------')
'''
掷骰子
两个:1~6

1:玩游戏要有金币,没有不能玩游戏
2:玩游戏曾1进币,充值获取金币
3:10元的倍数,20个金币
4:玩游戏消耗金币
5:猜大小,猜对鼓励金币5枚,猜错没有奖励,超出6点以上则为大,否则为小
6:游戏结束,主动退出
7:推出,打印金币数量,共玩了几局
'''
import random

conis = 10

while True:
    if conis < 5:
        print('余额不足,请充值后再玩!')
        money = int(input('请输入充值金额:'))
        while (money < 10) or (money % 10 != 0):
            money = int(input('金额数量应为10的倍数,请重新输入充值金额:'))
        conis += (money * 2)

    else:
        print('*******开启游戏之旅*******')
        conis -= 5

        randomdata1 = random.randint(1, 6)
        randomdata2 = random.randint(1, 6)
        print('点数为%d' % (randomdata1 + randomdata2))

        guess = int(input('请输入你猜的大小(1为小,2为大):'))

        if ((guess == 1) and (randomdata1 + randomdata2 <= 6)) or ((guess == 2) and (randomdata1 + randomdata2 > 6)):
            print('恭喜你,猜中了,奖励五枚金币')
            conis += 5
        else:
            print('很遗憾,答错了')

    print('当前金币余额为:%d' % conis)
    cmd = input('玩家是否继续?(y/n),请输入:')
    if cmd == 'n':
        print('玩家主动退出,游戏结束')
        break
else:
    print('游戏崩溃')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值