Python学习笔记(十) 分支结构语句之循环语句for,while和while循环嵌套

循环语句for

for循环的语法格式如下:

for  iterating_var  in  sequence:      # iterating_variable: 迭代变量,sequence: 序列

    statements(s)                   # statements: 语句

print(range(10))      # 0-10,不包含10
'''
格式:
for iterating_var in sequence:      # iterating_variable: 迭代变量,sequence: 序列
    statements(s)       # statements: 语句
'''
for i in range(10):
    print('hello ---->', i)

print('----- End -----')

 


吃馒头问题:

##### 吃馒头问题 #####
# 方式1
'''
for循环的取值范围示例1
'''
print('方式1')
name = '阿斯蒂芬'
for i in range(5):      # 0-5,不包含5
    print('%s很饿,正在吃第%d个馒头' % (name, i + 1))
print()

# 方式2
'''
for循环的取值范围示例2
'''
print('方式2')
for i in range(1, 6):     # 1-6,不包含6
    print('{}很饿,正在吃第{}个馒头'.format(name, i))
print()

# 方式3
'''
for循环嵌套使用if...else结构
'''
print('方式3')
name = '张无忌'
for i in range(1, 6):
    if i == 3:
        print('{}快扔掉这个馒头,有剧毒:鹤顶红!!!'.format(name))
    else:
        print('{}很饿,正在吃第{}个馒头'.format(name, i))

print('%s说:终于吃饱啦!' % name)
print()

# 方式4
'''
for...else语句,python独有的语句
    else:适用于for没有循环数据或已经循环完成时,后续需要做的事情
          range的范围正常执行完毕,而没有异常被break跳出,就可以执行else
          只要有break执行,就不会再执行else
书写格式为:
for i in 范围:
    有数据时执行的语句
else:
    没有数据或循环已经完成后要做的事情
'''
print('方式4')
num = int(input('请输入需要的馒头数量:'))# 输入0会怎么样直接执行else语句
for i in range(num):
    print('{}很饿,正在吃第{}个馒头'.format(name, i + 1))
    # if i == 3:
    #     print('这个馒头有剧毒,快丢掉它!!!')
    #     break     # 若执行了break,则下面的else将不会再执行
else:
    print('还没有给我馒头,{}饿哭啦...'.format(name))
print()


# 方式5
'''
pass关键字示例
    pass表示空语句
    只要有有缩进,而缩进的内容还不确定时,此时为了保证语法的完整性和正确性,
    就可以使用pass占位,且不会报出缩进错误IndentationError: expected an indented block
'''
if 10 > 7:      # 分别测试并解释大于> 和小于< 的两种结果
    print('10是大的')
else:
    pass        # 如果省略此处的pass,则会报错IndentationError: expected an indented block

print('----- 判断结束 -----')
print()

# 方式6
# 视频链接:https://www.bilibili.com/video/BV15J411T7WQ?p=39
'''
break关键字示例
    break表示强制跳出当前循环结构,继续执行下方的代码块
'''
for i in range(3):
    username = input('请输入用户名:')

username = username.replace(' ', '')    # 将空格替换为空
    password = input('请输入密码:')
    # 验证用户名和密码
    if username == 'songsong' and password == '123456':
        print('欢迎用户{}'.format(username))
        print('-' * 10, '轻松购物吧', '-' * 10)
        break       # 注意此处的break和最下面的else之间有何关联
        '''
        当登录成功时,执行break语句强制跳出当前循环,而最下面
        else语句也属于for循环体,因此不会执行最下面的else语句内容
        '''
    else:
        print('用户名或密码错误,请重新输入。')
else:
    print('连续3次错误,账户已被锁定,需要重新激活!')      # 三次输入错误的时候

'''
 range的三种写法
 range(n)           -->  range(0, n) # 不包含n
 range(m, n)        -->  range(m, n) # 不包含n
 range(m, n, step)  -->  range(start, end, step)    # step为步长
 
 class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
'''
for i in range(0, 51, 5):
    print('---->', i)

循环语句while

'''
循环语句 while
'''
i = 1
while i <= 10:
    print('---->', i)
    i += 1      # 没有i++,语法错误

print('打印完毕!')


'''
打印1 - 30之间的所有3的倍数
'''
# 方式1:推荐
n = 1
while n <= 30:
    if n % 3 == 0:
        print('---->', n)
    # 改变n的值
    n += 1

print('*' * 20)

# 方式2
n = 3
while n <= 30:
    print('====>', n)
    n += 3

print('*' * 20)

# 方式3
n = 3       # 都改成1的时候就不会有运行结果了
while n <= 30 and n % 3 == 0:
    print('****>', n)
    n += 3       # 改成1就不会有运行结果了分析为什么

'''
打印1 - 30之间所有既是3的倍数,也是5的倍数的数
'''
n = 1
while n <= 30:
    if n % 3 == 0 and n % 5 == 0:
        print('--------->', n)
    # 改变n的值
    n += 1

 

'''
使用while循环计算1 - 100之间的累加和
'''
i = 1
sum = 0

while i <= 100:
    sum += i
    i += 1

print('1 - 100之间的累加和是:', sum)

while循环嵌套

打印*号三角形:

'''
使用while循环嵌套打印*号三角形
'''
layer = 1
while layer <= 5:
    start = 1

    while start <= layer:
        print('*', end = ' ')    # 打印末尾符号为空
        start += 1

    layer += 1
    print()     # 换行

 

打印九九乘法表:

'''
打印九九乘法表
1 * 1 = 1
1 * 2 = 2   2 * 2 = 4
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9
......
1 * 9 = 9   2 * 9 = 18  ......
'''
layer = 1
while layer <= 9:
    number = 1

    while number <= layer:
        # print('{} * {} = {}    '.format(number, layer, (number * layer)), end = '')
        print('%d *%2d = %2d    ' % (number, layer, (number * layer)), end = '')
        number += 1

    layer += 1
    print()

 

小练习:澳门赌场之大富翁

'''
小练习:门赌场之大富翁
    1、欢迎进入xxx游戏
    2、输入用户名,用户默认没有币
    3、提示用户充值买币(100块钱30币,充值必须是100的倍数,充值不成功可以再次充值)
    4、玩一局游戏扣2个币,猜大小(系统用随机数模拟骰子的值)
    5、只要猜对了奖励双倍金币,可以继续玩,也可以主动退出
    6、没有币或币小于2个自动退出
'''

import random
import time

print('*' * 31)
print('     欢迎来到澳门赌场之大富翁')
print('*' * 31)

username = input('请输入一个昵称:')
token = 0       # 默认没有币
answer = input('确定进入游戏吗(y / n)? ')

if answer == 'y' or answer == 'Y':
    # 判断游戏币是否充足,不充足则提示充值
    while token < 2:        # 玩一局需要2个币,小于2个币则不能继续游戏
        print('当前游戏币:', token)
        top_up = int(input('金币不足,请充值(10030币,充值金额必须是100的倍数): '))
        if top_up % 100 == 0 and top_up > 0:
            token = (top_up // 100) * 30  # //*的优先级相同,括号可省略
        else:
            print('充值失败,充值金额必须是100的倍数。')
    print('昵称:{},当前游戏币: {}\n'.format(username, token))

    # 进入游戏
    print('正在进入游戏......\n')
    time.sleep(2)
    print('进入游戏《大富翁》。')

    while True:
        token -= 2      # 进入游戏花费2个币
        print('\n系统正在洗牌......\n')
        time.sleep(1)
        # 骰子产生2个数,需导入random
        dice1 = random.randint(1, 6)        # 1-6,包含6
        dice2 = random.randint(1, 6)
        # print(dice1, dice2)       # 打印两个随机数
        print('系统洗牌完毕,请猜大小:')
        guess = input('请输入或者')

        # 判断是否猜中
        if (guess == '' and dice1 + dice2 > 6) or (guess == '' and dice1 + dice2 <= 6):
            print('\n恭喜{}猜中本轮结果,奖励4个游戏币。'.format(username))
            token += 2 * 2
            print('当前游戏币:', token)
        else:
            print('\n很遗憾猜错了,本局游戏输啦/(o)/~~')
            print('当前游戏币:', token)

        # 询问是否继续游戏
        answer = input('\n是否再来一局? 需扣除2个游戏币(y / n)')
        # if (answer != 'y' or answer != 'Y') or token < 2:     # 有错误,需改善
        if answer != 'y' or token < 2:
            print('退出游戏啦!!!')
            print('您的游戏币总数为:', token)
            break       # 退出while Ture循环

elif answer == 'n' or answer == 'N':
    print('退出游戏,放弃了一个亿!!!')

else:
    print('输入错误,您可能还不想赚一大笔钱!!! ')

 

课后小结:

# 1 - 50之间偶数的累加和的两种循环方式
# 方式1while循环
i = 1
sum = 0
while i <= 50:
    if i % 2 == 0:
        sum += i

    i += 1
print('sum = ', sum)
print('完成while循环之后,i的值是:', i)


print()


# 方式2for循环
sum = 0
for i in range(1, 51):
    b = 0
    b += i

    if i % 2 == 0:
        sum += i

print('sum = ', sum)
print('完成for循环之后,i的值是:', i)

print('b---->', b)      # 变量b提示:Name 'b' can be undefined
'''
上面print的目的:
1、声明变量的位置:
    声明在forwhile的外层,sum += i相当于累加,
    如果声明在forwhile的内层,每次循环都会执行sum = 0
2、在python中,没有作用域这一说法
    forwhile循环中没有变量的作用域这一说法,
    forwhile循环结构的内外层都可以获取这个变量的值
'''
print()


# 1 - 10之间不是3的倍数的累加和
# 方式1
sum = 0
for i in range(10):
    if i % 3 != 0:
        sum += i
print('方式1sum ---->', sum)

sum = 0
for i in range(10):
    if i % 3 == 0:
        continue        # continue:跳过当前循环,不执行循环体中continue下面的任何语句,直接执行下一次循环
    sum += i
print('方式2sum ---->', sum)

(完)