• python 约瑟夫生者小游戏 用list实现


    问题描述:

    30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。

    报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

      查看网上的资料都是把人员实例为字典,1代表在船上,0代表下船。网上的实现代码如下:

     1 people={}
     2 for x in range(1,31):
     3   people[x]=1
     4 # print(people)
     5 check=0
     6 i=1
     7 j=0
     8 while i<=31:
     9   if i == 31:
    10     i=1
    11   elif j == 15:
    12     break
    13   else:
    14     if people[i] == 0:
    15       i+=1
    16       continue
    17     else:
    18       check+=1
    19       if check == 9:
    20         people[i]=0
    21         check = 0
    22         print("{}号下船了".format(i))
    23         j+=1
    24       else:
    25         i+=1
    26         continue
    View Code

      重新写了一种以list来实现该功能。代码如下:

     1 people = [x for x in range(1, 31)]  # 生成人员
     2 
     3 xia = []  # 存放下船人的list
     4 j = 0  # 上次顺序下船的余量
     5 while True:
     6     for i in range(1, len(people)+1):
     7 
     8         if (i+j) % 9 == 0:
     9             xia.append(people[i-1])
    10     j = (len(people) + j) % 9
    11     print("下船者:", xia)
    12     for x in xia:
    13         people.remove(x)
    14     xia = []
    15     if len(people) <= 15:
    16         break

    ----------------------------------------------------------6.29 更新--------------------------------------------------------------------

    发现上面的代码有漏洞,

    1、第11行打印下船人数,但是这一步人还没有remove出list,所以这行代码要后置

    2、上面的代码考虑不全,容易下船的人多于15个。原因就是第13行在remove的时候没有增加人数的判断(第15~16行的代码)

      比如修改为50人,数到的3下船,留20人在船上。用上面的代码跑就会导致船上留的人少于20人

    故,修改代码如下: 

    people = [x for x in range(1, 51)]  # 生成人员
    xia = []  # 存放下船人的list
    j = 0  # 上次顺序下船的余量
    while True:
        for i in range(1, len(people)+1):
            if (i+j) % 3 == 0:
                xia.append(people[i-1])
        j = (len(people) + j) % 3  # 余数需要计入下一次循环
        for x in xia:
            people.remove(x)
            print("下船者:", x)
            if len(people) == 20:  # 判断到20人的时候终止循环
                raise "完成"  # 用异常退出2次循环
            else:
                continue
        xia = []
  • 相关阅读:
    LInux环境变量讲解
    w
    ubuntu和win10双系统,关于wife问题
    python字符串的maketrans方法和translate方法实现加密解密
    ubuntu中jdk8的配置
    Java第四十五天,SpringBoot框架系列,SpringBoot基础(四)
    Java第四十五天,SpringBoot框架系列,SpringBoot基础(三)
    Java第四十五天,SpringBoot框架系列,SpringBoot基础(二)
    Java第四十五天,SpringBoot框架系列,SpringBoot基础(一)
    Java第三十七天,Mybatis框架系列,Mybatis 的连接池以及事务控制
  • 原文地址:https://www.cnblogs.com/yifengyu/p/16407673.html
Copyright © 2020-2023  润新知