xy1770 发表于 2020-7-6 16:16:09

约瑟夫生存小游戏-注释


30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

题目出自:https://www.runoob.com/python3/python-joseph-life-dead-game.html

【1】
代码看不懂,能否帮忙加个注释,感谢

【2】
哪里有这类的题目可以做,带解释的
买书/买课也可以,最主要是答案有注释,感谢。



people={}
for x in range(1,31):
    people=1   #这个[ ]是咋回事?这个[ ]是什么格式
check=0
i=1
j=0#为什么要设置2个
while i<=31:
    if i == 31:
      i=1 #等于31的时候,i又要等于1??
    elif j == 15:   #j是干嘛用的,为啥是15的时候break?
      break
    else:
      if people == 0: #这到底是哪个等于零,集合people里的元素i等于0??
            i+=1 #接下来的都看不懂……
            continue
      else:
            check+=1
            if check == 9:
                people=0
                check = 0
                print("{}号下船了".format(i))
                j+=1
            else:
                i+=1
                continue

Twilight6 发表于 2020-7-6 16:42:23



【1】代码看不懂,能否帮忙加个注释,感谢
看注释吧,从你问题看出来你对字典这个概念还了解的有点少哈~:

people = {}# 设置一个字典,用来计下人

for x in range(1, 31):# 这边等于把键设置为人排队的顺序了
    people = 1# 字典键值对赋值,[]里面的是 key 键,等号右边的是 value 值
    # 这里实际上把默认值都设置为了 1 表示这个人在船上,0表示这个人已经下船了

check = 0   # check 用来统计叫到的号码
i = 1# 这个就是人的编号,最大 31 号
j = 0# 为什么要设置2个
while i <= 31:
    if i == 31:
      i = 1# 等于31的时候,说明第一次叫号数结束,重新开始下一次的循环
    elif j == 15:# j 是用来统计下船的人数的,当15个人下船了说明满足题意了,所以退出循环
      break
    else:
      if people == 0:# 如果值为 0 表示这个人已经下船,所以 i + 1后 continue 跳过这个人的保数 重新开始下次循环
            i += 1
            continue
      else:      # 如果 if 条件不满足则执行 else 的代码块,if 不成立 说明的就是 这个人在船上
            check += 1    # 这个人报数一位数
            if check == 9: # 判断是否是报到 9 号,若是 把这个人的 value 设置为 0 表示下船
                people = 0
                check = 0# 重新开始下轮的的报号
                print("{}号下船了".format(i))# 打印下船的人的编号
                j += 1# 统计下船人数 +1
            else: # 如果check 不等于 9 说明这个人还不用下船,那么开始下一次的循环
                i += 1
                continue

【2】哪里有这类的题目可以做,带解释的
买书/买课也可以,最主要是答案有注释,感谢。

Leetcode 力扣 :https://leetcode-cn.com/problemset/all/

解题官方好像一般没给出,但是广大网友有发布自己的解题过程,而且如果你也有好的解题过程也可以发布上去



美式不加冰 发表于 2020-7-6 16:51:12

people={}
for x in range(1,31):
    people=1   #这个[ ]是咋回事?这个[ ]是什么格式//开了一个people数组,为people中每个元素赋值为1
check=0   #表示1到9的遍历
i=1
j=0#为什么要设置2个//i表示30个人标号,j表示下船人数。
while i<=31:
    if i == 31:
      i=1 #等于31的时候,i又要等于1??//当i=31时遍历一遍结束,重头开始重新遍历
    elif j == 15:   #j是干嘛用的,为啥是15的时候break?// j表示下船人数,下船15人结束
      break
    else:
      if people == 0: #这到底是哪个等于零,集合people里的元素i等于0??//people中第i个元素等于0,等于0表示这个位置的人已经下船了
            i+=1 #接下来的都看不懂……//检测下一个人
            continue
      else:
            check+=1
            if check == 9:   #遇9下船
                people=0
                check = 0   #下船以后再次从1到9遍历
                print("{}号下船了".format(i))
                j+=1      #下船人数加1
            else:
                i+=1      #同上
                continue
页: [1]
查看完整版本: 约瑟夫生存小游戏-注释