欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

“列表+循环”模拟“报数选猴王”小游戏

程序员文章站 2022-07-15 12:21:58
...

“列表+循环”模拟“报数选猴王”小游戏

关键字:

  • 循环
  • 列表操作
  • 模拟

摘要:

  • 编程对应生活、表达生活
  • 定义每一次报数后的“睡眠”时间
  • 可以扩展成其它小游戏,比如:“寻找打扫卫生的幸运儿”

游戏规则:

一群猴子围成一圈,按1,2,3,…,n依次编号。

从第1只开始数,数到第m只,把它剔除圈,再重新开始数。

如此不停的进行下去,最后剩下的那只就是大王。

思路:(游戏规则翻译成编程逻辑)

用一个列表list1来表示猴子,名字分别为猴1、猴2、猴3、…、猴n。

如何体现围成一圈?假设他们转圈到一个报数台依次报数,报完数的猴到队伍的最后面,等待下一次报数,用程序语言表示就是list1.append(list1.pop(0)),此处感谢浩源同学的灵感。

用一个内循环1,来表示数到第m只,剔除对应的猴子,此时圈中猴子总数减少了。

再用一个外循环2包括上面的循环1,来表示上述循环不停进行,直到猴子总数只剩下1只。

示意图

“列表+循环”模拟“报数选猴王”小游戏

预演:(将列表第1个(0位)弹出,放到最后)

list2 = ['猴1','猴2','猴3','猴4','猴5']
list2.append(list2.pop(0))
print(list2)
#打印输出结果为:['猴2', '猴3', '猴4', '猴5', '猴1']
  • 程序语言实现

def monkey_king(n,m): #定义函数封装
    list1 = [f'猴{i+1}' for i in range(n)] #列表用于表示猴子
    import time #用于增加时间间隔
    while len(list1) > 1 : #外循环2,游戏进行到只剩一只猴子
        print(f'\n剩下参与报数名单:{[i for i in list1]}') #每次剔除猴子后,剩下猴子名单
        print('从1开始报数!') #每次剔除猴子猴后,重新开始报数
        for i in range(m): #内循环1,报数至第m只猴子
            print(f'{list1[0]}: {i+1}',end='\t\t') #打印每次猴子报数
            list1.append(list1.pop(0)) #将报完数的猴子放到圈最后
            time.sleep(1) #报完数,时间间隔
        print(f'{list1[-1]} out!') #内循环一次后,通报被剔除的猴子名字
        del list1[-1] #内循环一次后,剔除猴子
        time.sleep(3) #内循环一次后,时间间隔
    return list1[0] #函数返回最后剩下的猴子名字

print('\nThe monkey king is:',monkey_king(7,5)) #调用函数
  • 第一种情况输出展示(以报数m=5,猴子数n=7为例,猴子数多于报数):

'''
剩下参与报数名单:['猴1', '猴2', '猴3', '猴4', '猴5', '猴6', '猴7']
从1开始报数!
猴1: 1		猴2: 2		猴3: 3		猴4: 4		猴5: 5		猴5 out!

剩下参与报数名单:['猴6', '猴7', '猴1', '猴2', '猴3', '猴4']
从1开始报数!
猴6: 1		猴7: 2		猴1: 3		猴2: 4		猴3: 5		猴3 out!

剩下参与报数名单:['猴4', '猴6', '猴7', '猴1', '猴2']
从1开始报数!
猴4: 1		猴6: 2		猴7: 3		猴1: 4		猴2: 5		猴2 out!

剩下参与报数名单:['猴4', '猴6', '猴7', '猴1']
从1开始报数!
猴4: 1		猴6: 2		猴7: 3		猴1: 4		猴4: 5		猴4 out!

剩下参与报数名单:['猴6', '猴7', '猴1']
从1开始报数!
猴6: 1		猴7: 2		猴1: 3		猴6: 4		猴7: 5		猴7 out!

剩下参与报数名单:['猴1', '猴6']
从1开始报数!
猴1: 1		猴6: 2		猴1: 3		猴6: 4		猴1: 5		猴1 out!

The monkey king is: 猴6
'''

  • 第二种情况输出展示(以报数m=7,猴子数n=5为例,猴子数少于报数):

'''
剩下参与报数名单:['猴1', '猴2', '猴3', '猴4', '猴5']
从1开始报数!
猴1: 1		猴2: 2		猴3: 3		猴4: 4		猴5: 5		猴1: 6		猴2: 7		猴2 out!

剩下参与报数名单:['猴3', '猴4', '猴5', '猴1']
从1开始报数!
猴3: 1		猴4: 2		猴5: 3		猴1: 4		猴3: 5		猴4: 6		猴5: 7		猴5 out!

剩下参与报数名单:['猴1', '猴3', '猴4']
从1开始报数!
猴1: 1		猴3: 2		猴4: 3		猴1: 4		猴3: 5		猴4: 6		猴1: 7		猴1 out!

剩下参与报数名单:['猴3', '猴4']
从1开始报数!
猴3: 1		猴4: 2		猴3: 3		猴4: 4		猴3: 5		猴4: 6		猴3: 7		猴3 out!

The monkey king is: 猴4
'''

总结: