# 第40期-报数
Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。
# 1 问题描述
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,
问最后留下的是原来第几号的那位。
要求:输入围成一圈的人数n
输出最后一个人的编号
# 2 解题思路
- 第一步: 输入围成一圈的人数,input函数
- 第二步: 选哟注意每次出局一人总人数就会少一个,直接计算可能过于复杂,可以选择给他们特殊编号,转完一圈后再统一出局
# 3 解题方法
n = int(input('请输入围成一圈的人数:'))
a = []
for i in range(n):
a.append(i + 1)
def count(a):
i = 2
while True:
if len(a) == 2:
if i == 1:
return a[0]
else:
return a[1]
a[i] = 0
i += 3
if i >= len(a):
i -= len(a)
while True:
try:
a.remove(0)
except:
break
print(count(a))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
第1行: 使用input函数提示用户输入围成一圈的人的数量,并赋值给n
第2-4行: 定义列表a,将人数从1到n加到列表中
第7行: 定义函数count,其内变量为列表a
第8行: 定义索引变量i,因为第一个出局的玩家在列表中的索引为2,所以给i赋值为2
第10-14行: 当列表长度为2时,可能会出现减去列表长度结果仍然超出列表长度的情况,所以对列表长度为2的情况需要特别考虑
第15行: 将即将出局的人标记为0
第16行: 索引加3进行下次标记
第17-18行: 当索引大于或等于列表长度时,无法索引,需要循环到列表开头
第19行: 此时单次列表索引完毕,开始清除所有为0的玩家,无限循环,开始将0踢出列表
第20-23行: 一直删除0知道没有0可以删除,结束本次内部循环
第26行: 输出剩余的人
代码运行结果为:
这里用到了try、except语句,简单讲解下这个语句:
try-except 语句(以及其更复杂的形式)定义了进行异常监控的一段代码,并且提供了处理异常的机制.
try 块允许您测试代码块以查找错误。
except 块允许您处理错误。
例如:
try:
print(x)
except:
print("An exception occurred")
2
3
4
由于 try 块引发错误,因此会执行 except 块。
如果没有 try 块,程序将崩溃并引发错误
此代码将会输出 An exception occurred
# 4 视频解析
高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码