Python学习笔记(十二):For循环实战(1)-《生活大爆炸版石头剪刀布》题解

原题目链接

原题目:洛谷 P1328

解题思路

1.读入数据

2.利用变量指向本局对战,各自出的手势

3.判断输赢,计分

4.移动指向(向后顺移。注意,如果超出范围则回归为0)

5.输出比分

谁输谁赢?

这是个比较头疼的问题。原链接只给了一张表格:

结果 0 1 2 3 4
0
1 -
2 - -
3 - - -
4 - - - -

 

这样的话,就需要两次判断计分(A和B各一次)。

所以,为了方便起见,我把表格补全了:

结果 0 1 2 3 4
0
1
2
3
4

 

(补全方法:每一斜行,以“平”为分界线,做类似对称的移动,即右上→左下,再将左下部分取相反即可)

如图:

Python学习笔记(十二):For循环实战(1)-《生活大爆炸版石头剪刀布》题解_第1张图片

这样,只需要对于当前A的手势(左侧一列)进行每行的判断即可。

代码实现

重要声明:抄袭、复制代码是非常恶劣的行为。此类行为将会导致您成为作弊者。代码仅供参考

N,NA,NB=map(int,input().split())
A=list()
B=list()
A=list(map(int,input().split()))
B=list(map(int,input().split()))
pa=0    #指向A的手势
pb=0    #指向B的手势
sa=0    #A的分数(score of a)
sb=0    #B的分数(score of b),不要想太多

for i in range(N):
    if A[pa]==B[pb]:    #平局
        pass            #各得0分
    
    elif A[pa]==0:
        if B[pb]==1:
            sb+=1
        if B[pb]==2:
            sa+=1
        if B[pb]==3:
            sa+=1
        if B[pb]==4:
            sb+=1
            
    elif A[pa]==1:
        if B[pb]==0:
            sa+=1
        if B[pb]==2:
            sb+=1
        if B[pb]==3:
            sa+=1
        if B[pb]==4:
            sb+=1
            
    elif A[pa]==2:
        if B[pb]==0:
            sb+=1
        if B[pb]==1:
            sa+=1
        if B[pb]==3:
            sb+=1
        if B[pb]==4:
            sa+=1
            
    elif A[pa]==3:
        if B[pb]==0:
            sb+=1
        if B[pb]==1:
            sb+=1
        if B[pb]==2:
            sa+=1
        if B[pb]==4:
            sa+=1
            
    elif A[pa]==4:
        if B[pb]==0:
            sa+=1
        if B[pb]==1:
            sa+=1
        if B[pb]==2:
            sb+=1
        if B[pb]==3:
            sb+=1
    pa+=1             #顺移指向
    pb+=1
    
    if pa>=len(A):    #防止指向列表外部
        pa=0
    if pb>=len(B):
        pb=0        

print(sa,sb)          #输出

 

你可能感兴趣的:(翼城朝雨的Python学习笔记)