python:石头剪刀布

该博客介绍了如何使用Python实现石头剪刀布游戏的算法,包括处理周期性出拳规律和判断胜负。通过输入双方的出拳周期和具体规律,程序会计算并输出在N轮后哪一方获胜。示例中展示了具体的输入输出格式和代码实现,强调了列表生成式和条件判断在程序中的应用。
摘要由CSDN通过智能技术生成

石头剪刀布赢家

描述:

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小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 = 00      #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')

总结:

  1. 思路是把A和B的出拳周期规律记录在列表当中,然后取模进行循环比较,直到比较n次为止,期间谁赢谁的次数加一。

  2. (重点)列表的生成式输入:
    L = [int(i) for i in input(i).split()],这个相对于用for循环输入要方便多。

  3. 还有k的for循环,第一次交是直接写的range(k),由于range的初始值是0,所以取模运算不对,所以应该写成从1开始到k。

  4. pass语句就是什么都不执行,直接跳过。

  5. 字符的输出要加引号。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值