石头剪刀布赢家
描述:
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?
输入:
输入包含三行。 第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB <
100。 第二行包含NA个整数,表示小A出拳的规律。 第三行包含NB个整数,表示小B出拳的规律。
其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。
输出:
输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。
样例输入:
10 3 4
0 2 5
0 5 0 2
样例输出:
A
提示:
对于测试数据,猜拳过程为:
A:0 2 5 0 2 5 0 2 5 0
B:0 5 0 2 0 5 0 2 0 5
A赢了4轮,B赢了2轮,双方打平4轮,所以A赢的轮数多。
实现代码:
aa,bb = 0 ,0 #aa,bb 初始化
n,a,b= (int(m) for m in input().split())
L1 = [int(i) for i in input().split()]
L2 = [int(j) for j in input().split()]
for k in range(1,n+1):
if L1[(k-1)%a]==2 and L2[(k-1)%b]==5:
aa += 1
elif L1[(k-1)%a]==5 and L2[(k-1)%b]==0:
aa += 1
elif L1[(k-1)%a]==0 and L2[(k-1)%b]==2:
aa += 1
elif L1[(k-1)%a]== L2[(k-1)%b]:
pass
elif L2[(k - 1) % b] == 2 and L1[(k - 1) % a] == 5:
bb += 1
elif L2[(k - 1) % b] == 5 and L1[(k - 1) % a] == 0:
bb += 1
elif L2[(k - 1) % b] == 0 and L1[(k - 1) % a] == 2:
bb += 1
if aa > bb:
print('A')
elif aa == bb:
print('draw')
elif aa < bb:
print('B')
总结:
-
思路是把A和B的出拳周期规律记录在列表当中,然后取模进行循环比较,直到比较n次为止,期间谁赢谁的次数加一。
-
(重点)列表的生成式输入:
L = [int(i) for i in input(i).split()],这个相对于用for循环输入要方便多。 -
还有k的for循环,第一次交是直接写的range(k),由于range的初始值是0,所以取模运算不对,所以应该写成从1开始到k。
-
pass语句就是什么都不执行,直接跳过。
-
字符的输出要加引号。