设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 35243|回复: 1
打印 上一主题 下一主题

【每周一坑】3道题

[复制链接]

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

楼主
发表于 2016-1-16 16:57:07 |显示全部楼层
所謂的"重复下注"是指同時下注大,小,數字還是指下注多次分數啊?
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2016-1-16 18:47:17 |显示全部楼层
本帖最后由 manhong2112 于 2016-1-16 22:21 编辑
  1. def ex1(text):
  2.   i = {}
  3.   for j in text:
  4.     if j in i: i[j] += 1
  5.     else: i[j] = 1
  6.   return sorted(i.items(),key=lambda i: i[1],reverse=True)

  7. print(ex1("History is his story."))
复制代码
這是練習一
  1. def ex2():
  2.   from random import randint
  3.   from sys import exit

  4.   class Game:
  5.     thrownNumber = 0
  6.     gameRound = 0

  7.     def startNewGame(self):
  8.       self.gameRound += 1
  9.       print("New Game start, Round",self.gameRound)
  10.       self.thrownNumber = randint(3,18)

  11.     def endGame(self,*players):
  12.       for i in players:
  13.         playerScore = 0
  14.         playerScore += i.bet.get("big",0) * 2 if self.thrownNumber >= 11 else 0
  15.         playerScore += i.bet.get("small",0) * 2 if self.thrownNumber < 11 else 0
  16.         playerScore += i.bet.get(str(self.thrownNumber),0) * 10
  17.         i.score += playerScore
  18.         i.bet = {}

  19.   class Player():
  20.     score = 0
  21.     bet = {}
  22.     id = ""
  23.     def __init__(self,id,score = 100):
  24.       self.id = id
  25.       self.score = score
  26.       self.bet = {}

  27.     def addBet(self,type,betScore):
  28.       if self.score - betScore < 0: raise ValueError()
  29.       self.bet[type] = self.bet.get(type,0) + betScore
  30.       self.score -= betScore

  31.   class Computer(Player):
  32.     def addBet(self):
  33.       for i in range(randint(1,5)):
  34.         try:
  35.           betScore = randint(1,int(self.score/randint(1,5)) + 1)
  36.           if randint(0,1):
  37.             super().addBet("big" if randint(0,1) else "small",betScore)
  38.           else:
  39.             super().addBet(str(randint(3,18)),betScore)
  40.           pass
  41.         except ValueError: break

  42.   comp = Computer("Computer")
  43.   player = Player(input("Input Your Name: \n> "))
  44.   game = Game()

  45.   # game main body
  46.   while True:
  47.     game.startNewGame()
  48.     # print(game.thrownNumber)

  49.     # read input
  50.     print("Input 'quit' to end game, input 'end' or leave blank to end input, input as '<type/number> <bet>' to bet")
  51.     while True:
  52.       tmp = input("> ")
  53.       if tmp == "end" or tmp == "": break
  54.       if tmp == "quit": exit(0)
  55.       tmp = tmp.split(" ")
  56.       try: player.addBet(tmp[0],int(tmp[1]))
  57.       except ValueError: print("Over your existing score")
  58.       except IndexError: print("Wrong input, try again")

  59.     comp.addBet()
  60.     print(comp.id," bet ",comp.bet,sep="")
  61.     print(player.id," bet ",player.bet,sep="")

  62.     game.endGame(player,comp)
  63.     print("Number is", game.thrownNumber)

  64.     print(comp.id,"'s score: ",comp.score,sep="")
  65.     print(player.id,"'s score: ",player.score,sep="")

  66.     print("="*24,sep="")

  67. ex2()
复制代码
不知道為甚麼有時候player的分數會動,而且只出現在一開始
Edit: 似乎在一開始有不知名原因讓電腦的下注寫入到玩家的下注了
Edit: 似乎沒這麼簡單,第一回兩者的下注合在一起了? ! 而且只限於第一回?!!!
Edit: 將繼承去掉後就能正常運作,然而我依然不懂繼承的哪裡弄錯了,都快崩潰啦TAT
Edit: 雖然不太清楚為甚麼,但兩個對象的dict都指向了同一個位址,是因為繼承直接把列表的位址也複製了嗎?也就是說,繼承時子類的東西是直接指向父類?
Edit: 在 __init__ 把dict初始化了, 也沒太大問題了,美化就懶的弄了,就醬子吧!
Edit: 插一句不相關的,能否加個折疊之類的把代碼折起來,免得一大串代碼放在那邊佔空間  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-8 02:02 , Processed in 0.026392 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部