游戏Undercut是一个纸牌游戏,两位选手各有编号1-5的5张牌。每一轮中每个玩家选择一张牌,然后依次出示各自的牌。如果两张牌数相同,则没有比分。另有两种情况:两张牌的数字只相差1(这就是所谓的Undercut游戏),或者两张牌数字相差值超过1。在后一种情况下,出示较大数字牌的人获得自己的点数。在Undercut情况下,出示较小数字牌的人获得两张牌的点数之和。当两张牌分别是1和2时例外,出示较小数字牌的人获得6点(而不是只有3点)。每一轮之后,把牌退给选手,让他们玩另一轮比赛。
例如:
现在有5轮比赛,A的点数(以此顺序)是 5,3,1,3,5;B的点数是3,3,3,3,4.每轮比赛的分数将是A得5点、0点、0点、0点、0点;B得0点、0点、3点、0点、9点。总比分A得5点,B得12点。题目给出玩家双方的牌,编程计算玩家的最终得分输入(输入文件A1_input.txt):
将有多个输入实例,每个实例是一场比赛。每场比赛第一行是一个整数n(当n为0时表示输入结
束)。接下来有两行,每行分别包含n个1-5之间的整数,分别代表玩家n轮中的每张牌。第一张是A的牌,第二行是B的牌。输出:对每个输入实例输出一行,输出格式为:
A has a points. B has b points.其中,a为A得的点数,b为B得的点数。
输入示例:
5
5,3,1,3,5
3,3,3,3,4
4
2,3,1,1
1,5,5,5
0
输出示例:
A has 5 points. B has 12 points.
A has 0 points. B has 21 points.
def judge(a_cards,b_cards):num=len(a_cards) #获取卡牌count 执行循环ascore=0bscore=0for i in range(0,num):anum=int(a_cards[i])bnum=int(b_cards[i])if(anum == 2 and bnum == 1):bscore += 6elif(anum==1 and bnum==2):ascore += 6elif(anum!=bnum):if(anum>bnum):ascore += anumelse:bscore += bnumreturn ascore,bscore
with open('E:\文件\A1_input.txt','r') as f:fout=open('E:\文件\output.txt','w')while True:cn=eval(f.readline())if cn==0:breaka_cards=f.readline()b_cards=f.readline()ScoreA,ScoreB=judge(list(a_cards.split(',')),list(b_cards.split(',')))fout.write(f'A has {ScoreA} points. B has {ScoreB} points.\n')fout.close()