请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 32455|回复: 29

【每周一坑】3道题

[复制链接]

3

主题

0

好友

511

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-8-30 00:13:55 |显示全部楼层
1.难度:★
从控制台输入或从文件中读入一段文本,统计出其中每个字符出现的次数,并按照出现次数排序输出。
例如:
History is his story.
输出:
s:4
i:3
:3
t:2
o:2
r:2
y:2
h:1
H:1
.:1

2.难度:★★
制作一个骰子游戏:假想有3个6面骰子,可以掷出3~18的数,其中3~10为小,11~18为大。起始为100分,每掷一次之前先押注,可押大小或数字,可重复下注。掷出结果后,押中大小,所押分数翻倍返还;押中数字,所押分数10倍返还。
增加电脑玩家,同你一起进行游戏。

3.难度:★★★
脚本登陆器
挑一个你看得顺眼的网站,通过代码模拟登录请求,并获取登录状态。进而再模拟进行用户操作,如发表状态、留言、评论等。
模拟登录是自动抓取某些网站的必要步骤。



回复

使用道具 举报

0

主题

0

好友

26

积分

新手上路

Rank: 1

发表于 2015-10-26 01:03:53 |显示全部楼层
为什么没有答案啊
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-10-26 13:03:12 |显示全部楼层
冷月无声 发表于 2015-10-26 01:03
为什么没有答案啊

管挖不管埋
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

同时下注好几个
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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: 插一句不相關的,能否加個折疊之類的把代碼折起來,免得一大串代碼放在那邊佔空間  
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

发表于 2016-2-25 21:15:08 |显示全部楼层
做第一题的时候遇到set这个概念,去查了下大致都懂了,但是有一个问题想请教crossin先生:
我知道set是无序的,但是在输出的时候却感觉总是有固定顺序,例如:
s = set([1, 2, 2, 3, 3, 3])
print s
for i in s:
        print i,
永远输出:
set([1, 2, 3])
1 2 3
如果:
a = [11, 22, 33, 44, 11, 22]
print set(a)
永远输出:
set([33, 11, 44, 22])
另外,如果s = {0, 1, 2, 3},调用s.pop(),又总是pop出0这个元素...
以上这些是为什么呢?
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

发表于 2016-2-25 21:27:46 |显示全部楼层
catherinemic 发表于 2016-2-25 21:15
做第一题的时候遇到set这个概念,去查了下大致都懂了,但是有一个问题想请教crossin先生:
我知道set是无序 ...

好像是电脑会有记忆一样,在别人的电脑上run一下,是不是就会有不一样的结果?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-2-25 22:15:53 |显示全部楼层
catherinemic 发表于 2016-2-25 21:27
好像是电脑会有记忆一样,在别人的电脑上run一下,是不是就会有不一样的结果? ...

这个我不知道。但无序不代表乱序,它的顺序肯定跟它的实现有关,输入条件不变,顺序每次应该是一致的。至于会是什么顺序,那要去看它的源码实现了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

发表于 2016-2-26 16:15:54 |显示全部楼层
crossin先生 发表于 2016-2-25 22:15
这个我不知道。但无序不代表乱序,它的顺序肯定跟它的实现有关,输入条件不变,顺序每次应该是一致的。至 ...

谢谢crossin老师,今天准备去看看爬虫的一些内容,但是看到headers里的一些属性,就不太懂了,感觉是跟网页相关的一些东西,这些内容该怎么学呢?
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 02:40 , Processed in 0.026027 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部