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