白本羽 发表于 2021-5-7 22:18:00

策略优化问题,想用代码实现,能力不够,只写了一种策略,求优化代码

规则:有三扇门,每扇门一开始都是关着的,门后有着随机数量的金币,点击一次后,对应的门会打开,开门时不会获得金币,若继续点击该门则获得对应门后的金币,每隔3轮,未被点击的门会关闭,并且门后的金币数重新随机产生,每个人有100次点击的机会,金币数量最多的人获胜.

门:
1.有开关两种状态,且关闭时不能获取金币,起始状态为关
2.门后的金币数在(1.50)之间随机产生
3.每隔3轮,未被点击的门要进行重置

人:
1.具有金币数量起始为0
2.具有一百次机会

import random as r


class Door:
    def __init__(self, state=False):#初始化门的状态
      self.state = state
      self.gold_coin = r.randint(1, 50)
      self.num = 3

    def count(self):#保证被选中的门不会被刷新
      if not self.state:
            self.state = True
            print(self.gold_coin)
      elif self.state:
            print(self.gold_coin)
            self.num += 1

    def refresh(self):#三轮未被选中的门刷新
      if self.num == 0:
            self.num = 3
            self.gold_coin = r.randint(1, 50)
            self.state = False
      else:
            self.num -= 1


class Human:
    def __init__(self):#初始化人的状态
      self.max = 0
      self.click = 100
      self.goldcoinsum = 0


def strategy(chioce=1):
    a = Door()
    b = Door()
    c = Door()
    h = Human()
    whichdoor = ""
    otherdoors = []
    if chioce == 1:
      a.count()
      b.count()
      c.count()
      a.refresh()
      b.refresh()
      c.refresh()
      h.click -= 3
      h.max = max(a.gold_coin, b.gold_coin, c.gold_coin)#选最大的金币数的门
      if a.gold_coin > b.gold_coin and a.gold_coin > c.gold_coin:#判断哪个门金币数最大
            whichdoor = a
            otherdoors =
      elif b.gold_coin < a.gold_coin < c.gold_coin:
            whichdoor = c
            otherdoors =
      else:
            whichdoor = b
            otherdoors =
      while h.click > 0:#策略的循环
            h.goldcoinsum += h.max
            h.click -= 1
            whichdoor.count()
            whichdoor.refresh()
            otherdoors.refresh()
            otherdoors.refresh()
      print("您最终的金币总数为%d" % h.goldcoinsum)

strategy()

写的有点烂,大佬轻喷{:5_100:} {:5_100:} {:5_100:} {:5_111:}

nahongyan1997 发表于 2021-6-23 15:57:08

大佬没理你{:10_277:}
页: [1]
查看完整版本: 策略优化问题,想用代码实现,能力不够,只写了一种策略,求优化代码