Python基础 : 分支&循环结构

注:参考骆昊的Python - 100天从新手到大师项目笔记

1. 分支结构

关键字

  • if
  • elif
  • else

每个关键字后面记得加上冒号:

缩进

  • 连续的代码如果保持相同的缩进,则属于同一个代码块。

  • 缩进可以使用任意数量的空格,但通常使用4个空格,强烈建议不要使用制表键来缩进代码

  • 或者可以设置代码编辑工具将一个制表键自动变成4个空格

Notes

  • 强烈建议写代码的时候打开英文输入法,而中文输入法的英文输入模式

  • 代码扁平化:能用扁平化代码表示的就不要使用嵌套结构,嵌套层次过多会影响代码的可读性。

2. 循环结构

两种循环结构

  • for-in循环 (明确知道循环的次数)
  • while循环(不明确具体的循环次数)
for-in循环
  • 实现1-100的求和

  • total = 0
    for x in range(1, 101):
        total += x
    print(total)
    
  • range的用法

    • range(101):可以用来产生0到100范围的整数,取不到101。
    • range(1, 101):可以用来产生1到100范围的整数,前面是闭区间后面是开区间。
    • range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
    • range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
while循环
  • 通过布尔值控制循环

  • while True的用法

  • break和continue的使用

  • 猜数字游戏

    import random
    
    # 产生一个1-100范围的随机数
    answer = random.randint(1, 100)
    counter = 0
    while True:
        counter += 1
        number = int(input('请输入: '))
        if number < answer:
            print('大一点')
        elif number > answer:
            print('小一点')
        else:
            print('恭喜你猜对了!')
            break
    # 当退出while循环的时候显示用户一共猜了多少次
    print(f'你总共猜了{counter}次')
    
  • 99乘法表

    for i in range(1, 10):
        for j in range(1, i + 1):
            print(f'{i}*{j}={i * j}', end='\t')
        print()
    
  • Notes

    • end=’\t’ 是为空格
    • print() 是为换行输出的效果
    • answer = random.randint(1, 100) # random随机数的用法
    • x、y值的互换
    if x > y:
    x, y = y, x    
    # Python中可以用这样的方式来交换两个变量的值,确定较大的一个值
    

3. 分支和循环结构的运用

3.1 对于数字的拆分

  • 利用//和%把一个数字的十百千等位数拆分开来
  • 或利用这两个符号将正整数反转
  • 寻找水仙花数

    """
    找出所有水仙花数
    
    水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,
    它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,
    例如:13 + 53 + 33 = 153。
    
    Version: 0.1
    Author: 骆昊
    """
    for num in range(100, 1000):
        low = num % 10
        mid = num // 10 % 10
        high = num // 100
        if num == low ** 3 + mid ** 3 + high ** 3:
            print(num)
    
    
  • 正整数的反转

    """
    正整数的反转
    
    Version: 0.1
    Author: 骆昊
    """
    num = int(input('num = '))
    reversed_num = 0
    while num > 0:
        reversed_num = reversed_num * 10 + num % 10
        num //= 10
    print(reversed_num)
    
    

3.2 暴力求解法(穷尽法)

  • 对于一些求解的方式,可以根据取值范围采取穷举,有n个变量,就可进行n-1次for循环
  • 整除的表达:a%3==0
  • 百钱百鸡

    """
    《百钱百鸡》问题
    公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
    
    Version: 0.1
    Author: 骆昊
    """
    # 假设公鸡的数量为x,x的取值范围是0到20
    for x in range(0, 21):
        # 假设母鸡的数量为y,y的取值范围是0到33
        for y in range(0, 34):
            z = 100 - x - y
            if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:
                print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
    
    

3.3 善于使用 Ture or Flase

  • 就是先假设!
  • 如要输出多种情况,先假定不成立或成立,经过验证之后正确则输出这个结果,最后把Ture or Flase更正过来
  • 打印素数

    # 寻找100以内的素数(素数指的是只能被1和自身整除的正整数(不包括1))
    for num in range(2, 100):
        # 假设num是素数
        is_prime = True
        # 在2到num-1之间找num的因子
        for factor in range(2, num):
            # 如果找到了num的因子,num就不是素数
            if num % factor == 0:
                is_prime = False
                break
        # 如果布尔值为True在num是素数
        if is_prime:
    
  • CRAPS赌博游戏

    """
    Craps赌博游戏
    玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;
    玩家如果摇出其他点数则玩家继续摇骰子,如果玩家摇出了7点,庄家胜;
    如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。
    
    我们设定游戏开始时玩家有1000元的赌注
    游戏结束的条件是玩家破产(输光所有的赌注)
    
    Version: 0.1
    Author: 骆昊
    """
    
    from random import randint
    
    money = 1000
    while money > 0:
        print(f'你的总资产为: {money}元')
        go_on = False
        # 下注金额必须大于0小于等于玩家总资产
        while True:
            debt = int(input('请下注: '))
            if 0 < debt <= money:
                break
        # 第一次摇色子
        # 用1到6均匀分布的随机数模拟摇色子得到的点数
        first = randint(1, 6) + randint(1, 6)
        print(f'\n玩家摇出了{first}点')
        if first == 7 or first == 11:
            print('玩家胜!\n')
            money += debt
        elif first == 2 or first == 3 or first == 12:
            print('庄家胜!\n')
            money -= debt
        else:
            go_on = True
        # 第一次摇色子没有分出胜负游戏继续
        while go_on:
            go_on = False
            current = randint(1, 6) + randint(1, 6)
            print(f'玩家摇出了{current}点')
            if current == 7:
                print('庄家胜!\n')
                money -= debt
            elif current == first:
                print('玩家胜!\n')
                money += debt
            else:
                go_on = True
    print('你破产了, 游戏结束!')
    
    

3.4 _的使用

  • 斐波那契数列

    """
    输出斐波那契数列前20个数
    数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,按照这个规律,
    斐波那契数列的前10个数是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55。
    
    Version: 0.1
    Author: 骆昊
    """
    # 前两个数都是1
    a, b = 1, 1
    print(a, b, end=' ')
    # 通过递推公式算出后面的18个数
    for _ in range(18):
        a, b = b, a + b
        print(b, end=' ')
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值