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

原题目链接

原题目:洛谷 P1328

解题思路

1.读入数据

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

3.判断输赢,计分

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

5.输出比分

谁输谁赢?

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

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

 

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

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

结果01234
0
1
2
3
4

 

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

如图:

这样,只需要对于当前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)          #输出

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值