2022年 11月 9日

python编程基础之一维数组

python编程基础之一维数组

石头剪刀布

描述:

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

一天,小A和小B正好在玩石头剪刀布。
已知他们的出拳都是有周期性规律的,
比如:“石头--石头-剪刀-石头--石头-剪刀……”,
就是以“石头--石头-剪刀”为周期不断循环的。
请问,小A和小B比了N轮之后,谁赢的轮数多?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

输入:

输入包含三行。
第一行包含三个整数:N,NA,NB,
分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。
0 < N,NA,NB < 100。 

第二行包含NA个整数,表示小A出拳的规律。

第三行包含NB个整数,表示小B出拳的规律。

其中,0表示“石头”,2表示“剪刀”,5表示“布”。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

输出:

输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出平局。

样例输入:
10 3 4
0 2 5
0 5 0 2
  • 1
  • 2
  • 3
  • 4
样例输出:
A
  • 1
  • 2
提示:
对于测试数据,猜拳过程为:
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赢的轮数多。
  • 1
  • 2
  • 3
  • 4
  • 5

实现代码(附注释):

# 初始化赢的次数
aa, bb = 0, 0
first = input('请输入第一行内容(几轮,小A的周期长度,小B的周期长度):')
# n表示n轮,a表示小A的出拳周期长度,b表示小B的出拳周期长度
n, a, b = (int(m) for m in first)
second = input('请输入第二行(小A出拳的规律):')
# A表示小A的出拳规律,生成式  生成一个列表
A = [int(i) for i in second]
third = input('请输入第三行(小B出拳的规律):')
# B表示小B的出拳规律,生成式  生成一个列表
B = [int(j) for j in third]
# 返回的k表示循环的次数就是上面的n轮的次数
for k in range(1, n + 1):
    # k-1是因为遍历出来的k值是从1开始的,k如果不-1就取不到第一个元素了
    # A[(k-1) % a]是取A的下标,中括号里面最后的值是下标,是A的出拳规律列表里面的下标
    # A[(k-1) % a] 意思是每循环一次k就给他-1,余a的作用是防止数组越界,如果没有余a直接就减一的话
    # 当轮数是8次,而A和B的出拳规律是3和4的话  当循环到5次的时候就会越界
    # A[5]会越界,A的出拳规律也就是A生成的一个列表是3所以A[5]取不到 就会越界,而余a之后就不管怎么样都不会越界
    # B与上面A的解释一致

    # A赢的所有可能赢的方式
    if A[(k - 1) % a] == 2 and B[(k - 1) % b] == 5:
        aa += 1
    elif A[(k - 1) % a] == 5 and B[(k - 1) % b] == 0:
        aa += 1
    elif A[(k - 1) % a] == 0 and B[(k - 1) % b] == 2:
        aa += 1
    # 平局
    elif A[(k - 1) % a] == B[(k - 1) % b]:
        pass
    # B赢的所有可能赢的方式
    elif B[(k - 1) % b] == 2 and A[(k - 1) % a] == 5:

        bb += 1
    elif B[(k - 1) % b] == 5 and A[(k - 1) % a] == 0:
        bb += 1
    elif B[(k - 1) % b] == 0 and A[(k - 1) % a] == 2:
        bb += 1
# 如果小A赢得次数大于小B,就打印小A赢
if aa > bb:
    print('小A是最后赢家')
# 如果小A赢得次数等于小B,就打印平局
elif aa == bb:
    print('平局')
# 如果小A赢得次数小于小B,就打印小B赢
elif aa < bb:
    print('小B是最后赢家')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47