函数练习,Python函数练习求解

运气最佳游戏: 一群人排成一圈,按“1,2,......n”依次编号。然后从第1个人开始数,数到m把 踢出圈,其后的人再从1开始数,数到m,再把它踢出去...... 如此不停地进行下去直到最后只剩下一个人为止,那个人就是运气最佳。 具体需求如下所示。 编写函数模拟该游戏。 根据用户输入的m和n,指定人的总数n和踢出第m个人。 最后输出运气最佳的人的编号。

n = eval(input("请输入总人数:"))
m = eval(input("请输踢出第几个人:"))

list1 = []
for i in range(1, n+1):
    list1.append(i)

while len(list1) != 1:
    if len(list1) >= m:
        list1 = list1[m:] + list1[0:m-1]
        print(list1)
    elif len(list1) < m:
        while len(list1) != 1:
            if m%len(list1) != 0:
                list1 = list1[m%len(list1):] + list1[0:m%len(list1)-1]
            else:
                list1 = list1[0:-2]

print("最佳运气人编号为:%d号!"%list1[0])

这个可以吗?

n=int(input('总人数:'))
m=int(input('第m个人:'))
list=list(range(1,n+1))
while(len(list)!=1):
    list=list[m:]+list[0:m-1]
    while len(list)<m:
        try:
            m_1=m%len(list) if m%len(list)!=0 else len(list)
        except:
            break
        list=list[m_1:]+list[0:m_1-1]
        if len(list)==1:
            print('list=',list)
            break

 

n = int(input("请输入参与游戏的总人数:"))

ls = []

def biaohao(n,m):
	for a in range(1,n+1):
		ls.append(a)
	print("人员编号列表:{}".format(ls))
	ls.remove(m)
	print("剔除 m 后剩余人:{}".format(ls))
	print("剩余人数:{}".format(len(ls)))
	ls.clear()

while n>1:
	m = int(input("请输入想要剔除人的编号:"))
	if m >n:
		print("输入的m需要小于目前人数,请重新输入...")
		continue
	biaohao(n,m)
	n = n-1

我也是新手,可能题意理解有问题,不知道是不是你想要的结果