其他分享
首页 > 其他分享> > 第40期-报数

第40期-报数

作者:互联网

1 问题描述

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,
问最后留下的是原来第几号的那位。
要求:输入围成一圈的人数n
输出最后一个人的编号

2 解题思路

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))
View Code

第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行: 输出剩余的人

代码运行结果为:
image.jpg

这里用到了try、except语句,简单讲解下这个语句:
try-except 语句(以及其更复杂的形式)定义了进行异常监控的一段代码,并且提供了处理异常的机制.
try 块允许您测试代码块以查找错误。
except 块允许您处理错误。 例如:

try:
  print(x)
except:
  print("An exception occurred")

由于 try 块引发错误,因此会执行 except 块。
如果没有 try 块,程序将崩溃并引发错误
此代码将会输出 An exception occurred

 

标签:一圈,except,40,列表,try,索引,围成,报数
来源: https://www.cnblogs.com/lg03/p/15772218.html