for 循环用于集合, 其中的每一个元素都会执行同一段代码块; 而 while 循环会不断地运行同一段代码块, 直到不满足指定的条件为止.
1 示例
我们使用 while 循环语句, 设计一个小游戏. 让玩家输入一个数字, 程序将告诉他, 这个数是奇数, 还是偶数:
- # 输入提示
- prompt = '输入一个数字, 我将告诉你, 它是奇数, 还是偶数哦 O(∩_∩)O~'
- prompt += '\n 输入" 不玩了 ", 将退出本程序:'
- exit = '不玩了' # 退出指令
- content = '' #输入内容
- while content != exit:
- content = input(prompt)
- if content.isdigit():
- number = int(content)
- if (number % 2 == 0):
- print('该数是偶数')
- else:
- print('该数是奇数')
- elif content != exit:
- print('输入的必须是数字哦')
运行结果:
我们在这段程序中, 定义了一个退出指令, 只要玩家输入的不是这个指令, 程序就会一直运行.
2 活动状态标识
真实的游戏场景, 可能有很多情况都会导致游戏结束. 这时我们可以定义一个活动状态标识, 用于判断整个程序是否处于活动状态.
我们来改写之前的示例:
- prompt = '输入一个数字, 我将告诉你, 它是奇数, 还是偶数哦 O(∩_∩)O~'
- prompt += '\n 输入" 不玩了 ", 将退出本程序:'
- exit = '不玩了' # 退出指令
- content = '' # 输入内容
- active = True # 活动状态标识
- while active:
- content = input(prompt)
- if content.isdigit():
- number = int(content)
- if (number % 2 == 0):
- print('该数是偶数')
- else:
- print('该数是奇数')
- elif content == exit:
- active = False
- else:
- print('输入的必须是数字哦')
改写后, 程序逻辑变得更清晰咯 O(∩_∩)O~
在复杂的程序中, 可能存在很多事件都会导致程序停止. 这时, 设计一个活动状态标识就很有用: 其中的任何一个事件发生时, 把活动状态标识设置为 False, 主程序循环结束.
3 break 关键字
使用 break 关键字, 可以立即退出 while 循环.
- ...
- while active:
- content = input(prompt)
- if content.isdigit():
- ...
- elif content == exit:
- break
- else:
- ...
4 continue 关键字
使用 continue 关键字, 可以直接返回到循环的开头, 然后根据 while 条件测试结果来决定是否继续执行下一次循环.
- while active:
- content = input(prompt)
- if content.isdigit():
- number = int(content)
- if (number % 2 == 0):
- print('该数是偶数')
- else:
- continue
- elif content == exit:
- break
- else:
- print('输入的必须是数字哦')
这个改写后的示例, 将只会打印偶数; 如果碰到奇数, 则直接跳到下一个循环.
5 无限循环
每个 while 循环都必须有一条停止运行的条件, 否则就会无限循环执行下去. 如果程序不小心陷入无限循环, 那么就必须按 Ctrl + C , 或关闭显示程序输出的终端窗口, 来强行停止程序.
6 处理列表
可以使用 while 循环, 在遍历列表的同时对其进行修改. 而这在 for 循环中, 就不可以一边遍历一边修改.
6.1 迁移列表元素
- to_go_countries = ['英国', '法国', '美国'] # 想去的国家
- visited_countries = [] # 已去的国家
- while to_go_countries:
- country = to_go_countries.pop()
- print('准备去 [' + country+']')
- print('[1] 做攻略')
- print('[2] 出发')
- print('[3] 回来咯')
- visited_countries.append(country)
- print('to_go_countries:'+str(to_go_countries))
- print('这些国家去过啦:' + str(visited_countries))
运行结果:
代码中, 使用 pop() 方法弹出栈顶元素 (即列表末尾的最后一个元素), 并返回这个元素.
可以看到,[ 想去的国家列表] 在退出 while 循环之后, 已经被弹空啦 O(∩_∩)O~
6.2 删除列表元素
假设, 目前有这些菜可点, 但今天突然不想吃 "炸豆腐", 我们就可以这些写:
- foods = ['拌海蜇', '炝冬笋', '炸豆腐', '炸面筋', '麻辣野鸡', '炒肉片']
- while '炸豆腐' in foods:
- foods.remove('炸豆腐')
- print('foods=' + str(foods))
运行结果:
foods=['拌海蜇', '炝冬笋', '炸面筋', '麻辣野鸡', '炒肉片']
来源: http://www.jianshu.com/p/4fd1df615a1c