鱼C论坛

 找回密码
 立即注册
查看: 4658|回复: 1

[技术交流] 鱼C论坛Python精英挑战赛(第三季热身赛)

[复制链接]
发表于 2017-8-29 10:03:58 | 显示全部楼层 |阅读模式
本帖最后由 jerryxjr1220 于 2017-9-3 21:27 编辑

第三届鱼C论坛精英挑战赛即将开赛咯!为了增加趣味性,本届比赛增加了“新玩法”-- “押宝玩法”,“竞猜玩法”和“擂主玩法”。

规则:
1. “押宝玩法”:进入“押宝”竞猜帖,购买主题(5鱼币)参与“押宝”,最终“押宝”获胜者将平分奖池的奖金并额外获取10鱼币奖励。猜错者将不返还“押宝”的鱼币。若本届比赛无人“押宝”成功,奖金将累计到下次比赛。

2. “竞猜玩法”:直接在比赛帖的下方进行投票,凡事“竞赛”获胜者,将奖励5鱼币。竞猜无门槛,人人都可以参与。竞猜以后,请在本帖留个言,方便领取奖励。

3. “擂主玩法”:上一期挑战成功的鱼油成为挑战赛的擂主,擂主有优先权提议下一期的赛题,一届挑战赛共分5期,同一届中当擂主最长的鱼油有额外奖励。


本次热身赛题目:保龄球计分器

玩过保龄球的鱼油应该都知道保龄球的计分规则。
Untitled.png

我用Excel写了一个保龄球计分表,大家可以自行下载,以便进行程序调试。
Bowling.zip (9.24 KB, 下载次数: 14)

现在请设计一个保龄球计分器,输入一个字符串,例如“8/ 90 72 7/ 9/ 81 X 9/ X X9/"(中间以空格分隔),输出该局的得分,例如前面这个例子,输出172。如果输入的字符串不能被识别,则输出“N/A”。

代码中,尽量不要使用eval函数!

程序输出正确,执行效率高,且代码优雅的答题者获胜!

测试代码:
bowling_0 = 'X X X X X X X X X XXX' #300
bowling_1 = '9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/9' #190
bowling_2 = '90 9/ X X X 9/ X 8/ X 9/X' #208
bowling_3 = '9/ 8/ X 81 9/ X X 9/ 8/ X81' #192
bowling_4 = '9/ 8/ X 9/ X X X 9/ 8/ X9/' #215
bowling_5 = '9/ 0/ X 09 X X 8/ 09 8/ 0/0' #145

特别说明:热身赛奖金50鱼币,并且获胜者将作为“擂主”身份参与正式比赛。

热身赛截止日期:9月2日24时,竞猜和押宝截止日期为9月1日。

@冬雪雪冬 @SixPy @~风介~ @小甲鱼
单选投票, 共有 18 人参与投票
您所在的用户组没有投票权限

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-1 10:30:10 | 显示全部楼层
本帖最后由 小锟 于 2017-9-1 12:16 编辑
import re
def count(str1):
    scores = 0
    every = str1.split(' ')
    try:
        for i in range(10):
            scores += guize(every[i:] , scores)
        return scores
    except TypeError:
        return 'N/A'
def guize(every,scores):
    every = ''.join(every)
    #every2 = every[:2] + re.sub(r'(\d)/', r'\1X', every[2:])
    every3 =  re.sub(r'\d/', '0X', every[:3])
    try:
        s = [ (int(i) if i != 'X' else 10) for i in list(every3) ]
        #print(sum(s[:3]) if 'X' in every[0] or '/' in every[:2] else  sum(s[:2]))
        return sum(s) if 'X' in every[0] or '/' in every[:2] else  sum(s[:2])
    except ValueError :
        return 'N/A'
bowling_0 = 'X X X X X X X X X XXX' #300
bowling_1 = '9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/9' #190
bowling_2 = '90 9/ X X X 9/ X 8/ X 9/X' #208
bowling_3 = '9/ 8/ X 81 9/ X X 9/ 8/ X81' #192
bowling_4 = '9/ 8/ X 9/ X X X 9/ 8/ X9/' #215
bowling_5 = '9/ 0/ X 09 X X 8/ 09 8/ 0/0' #145
for i in [bowling_0 ,bowling_1,bowling_2,bowling_3,bowling_4,bowling_5]:
    print(count(i))
最后发现只用考虑前三个就行了

评分

参与人数 2荣誉 +5 鱼币 +10 贡献 +5 收起 理由
新手·ing + 5 加油!
jerryxjr1220 + 5 + 5 + 5 答题奖励!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表