循环语句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('金币不足,请充值(100元30币,充值金额必须是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之间偶数的累加和的两种循环方式
# 方式1:while循环
i = 1
sum = 0
while i <= 50:
if i % 2 == 0:
sum += i
i += 1
print('sum = ', sum)
print('完成while循环之后,i的值是:', i)
print()
# 方式2:for循环
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、声明变量的位置:
声明在for,while的外层,sum += i相当于累加,
如果声明在for,while的内层,每次循环都会执行sum = 0
2、在python中,没有作用域这一说法
在for,while循环中没有变量的作用域这一说法,
在for,while循环结构的内外层都可以获取这个变量的值
'''
print()
# 求1 - 10之间不是3的倍数的累加和
# 方式1:
sum = 0
for i in range(10):
if i % 3 != 0:
sum += i
print('方式1:sum ---->', sum)
sum = 0
for i in range(10):
if i % 3 == 0:
continue # continue:跳过当前循环,不执行循环体中continue下面的任何语句,直接执行下一次循环
sum += i
print('方式2:sum ---->', sum)