石头剪刀,但是等等!它的设置不同

2024-09-28 05:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

爱丽丝和鲍勃在玩石头剪刀布游戏

输入规范 第一行包含一个整数N(1)≤N≤100)表示游戏的数量。 第二行是Alice的形状序列,第三行是Bob的形状序列

输出规格 由空格分隔的两个整数,表示Alice赢得的游戏数和Bob赢得的游戏数


我首先使用.split()在列表中创建Alice和Bob的形状,然后为每个可能的场景设置一组elif和if语句。但是我遇到的问题是,如果我输入

3
rock rock rock 
rock rock paper

我得到的不是输出0, 1,而是0,0,我似乎不明白为什么。下面是我的代码

games = input()
alice = input()
bob = input()

alice = alice.split()
bob = bob.split()

awin = []
bwin = []
a = 0

while a < len(alice):
    for i in range(len(alice)):
        if alice[i] == "rock" and bob[i] == "rock":
            break
        elif alice[i] == "scissors" and bob[i] == "scissors":
            break
        elif alice[i] == "paper" and bob[i] == "paper":
            break
        elif alice[i] == "rock" and bob[i] == "scissors":
            awin.append('rock beat scissors')
            break
        elif alice[i] == "rock" and bob[i] == "paper":
            bwin.append('paper beat rock')
            break
        elif alice[i] == "paper" and bob[i] == "rock":
            awin.append('paper beat rock')
            break
        elif alice[i] == "paper" and bob[i] == "scissors":
            bwin.append('scissors beat paper')
            break
        elif alice[i] == "scissors" and bob[i] == "paper":
            awin.append('scissors beat paper')
            break
        elif alice[i] == "scissors" and bob[i] == "rock":
            bwin.append('rock beat scissors')
            break
        i += 1
    a+=1

print('output:')
print(awin)
print(bwin)
print(str(len(awin)) + " " + str(len(bwin)))

Tags: and游戏lenpaperbobprintalicebreak
2条回答

其他人对原始代码给出了一些指导。我只是想提供一种更“pythonic”的替代方法……因为编写这样的游戏会有点乐趣

此实现与原始问题中的代码不同,但具有以下优点:遵循游戏在现实生活中的流程

from collections import defaultdict 

# defaultdict returns 0 (int() initial value) if the key does
# not exist. So, encode contests in format AB where 1 means
# A beats B. All other scenarios default to 0 i.e. B wins.
game = defaultdict(int)
game['RS'] = 1
game['SP'] = 1  
game['PR'] = 1 

num_games = input()
aw,bw = 0,0 

while num_games:
   alice = raw_input('Shape for Alice:')
   bob = raw_input('Shape for Bob:') 
   aw += game[alice + bob]
   bw += game[bob + alice]
   num_games -= 1

print(aw,bw)

下面是代码的简化版本:

games = input()
alice = input()
bob = input()

alice = alice.split()
bob = bob.split()

awin = []
bwin = []

for i in range(len(alice)):
        # If both players play the same move
        if alice[i] == bob[i]:
            continue
        elif alice[i] == "rock" and bob[i] == "scissors":
            awin.append('rock beat scissors')
        elif alice[i] == "rock" and bob[i] == "paper":
            bwin.append('paper beat rock')
        elif alice[i] == "paper" and bob[i] == "rock":
            awin.append('paper beat rock')
        elif alice[i] == "paper" and bob[i] == "scissors":
            bwin.append('scissors beat paper')
        elif alice[i] == "scissors" and bob[i] == "paper":
            awin.append('scissors beat paper')
        elif alice[i] == "scissors" and bob[i] == "rock":
            bwin.append('rock beat scissors')

print('output:')
print(awin)
print(bwin)
print(str(len(awin)) + " " + str(len(bwin)))

相关问题 更多 >

    热门问题