Python 2.7 [代码正在运行]如何缩短我的代码?摇滚乐?

Python 2.7 [代码正在运行]如何缩短我的代码?摇滚乐?,python-2.7,Python 2.7,我试图在Python2.7上制作一个简单的两人游戏 根据玩家1和玩家2的选择,该程序将决定石头、布、剪刀游戏的结果。该程序将打印结果、每位玩家的得分和玩过的游戏总数。 我的问题是: 当输入为“Rock”时,代码不起作用。当输入为“Rock”时,代码起作用。纸和剪刀也是如此。如何使其工作?1.当输入为“Rock”时,代码不工作。当输入为“Rock”时,代码工作。纸和剪刀也是如此。我怎样才能让它工作 发件人: 加: 2.两名玩家必须在节目结束前输入他们的选择。这意味着当播放器1输入“-1”时,程序不

我试图在Python2.7上制作一个简单的两人游戏

根据玩家1和玩家2的选择,该程序将决定石头、布、剪刀游戏的结果。该程序将打印结果、每位玩家的得分和玩过的游戏总数。 我的问题是:


当输入为“Rock”时,代码不起作用。当输入为“Rock”时,代码起作用。纸和剪刀也是如此。如何使其工作?

1.当输入为“Rock”时,代码不工作。当输入为“Rock”时,代码工作。纸和剪刀也是如此。我怎样才能让它工作

发件人:

加:

2.两名玩家必须在节目结束前输入他们的选择。这意味着当播放器1输入“-1”时,程序不会立即终止。在终止前,它将继续向播放器2请求输入。当播放器1的输入为“-1”时,如何使程序立即终止

发件人:

加:

3.我的代码很长,在不牺牲任何功能的情况下缩短代码有什么建议或提示吗

使用函数定义。样本:

if (player_1=='-1' or player_2=='-1'):
    print 'End of game'
    break
elif dif in [-1, 2]:
    print ('Player 1 wins.')
    score1 = score1 + 1
    showScore()
elif dif in [1, -2]:
    print('Player 2 wins.')
    score2 = score2 + 1
    showScore()
else:
    print('Tie')
    showScore()

continue

def showScore():
    print '==================='
    print 'Score:'
    print 'Player 1: ' + `score1`
    print 'Player 2: ' + `score2`
    print 'Total game played: ' + `times`
    print ''

对于初学者来说,这里有一个很好的

,我将您的程序转换为Python 3。各方面都好。首先,它对
input
有一个正常的定义

一般来说,如果有N个值,其中N大于1,则最好使用数组。如果看到重复,请将数据移动到数组中并调用函数。当N为2时,您不必缩短代码(我的版本比您的版本长),但可以避免对播放器进行不同的处理,因为它们都通过相同的逻辑

将主逻辑也放在函数中,并为保留“main”代码

当您看到一个字符串
elif
s时,这也是一个使用数据替代指示器。在我的
victor
函数中,我迭代获胜组合的元组。您可能会考虑如何使用<代码> DICT<代码>。p>
import sys, os

def print_results( msg, times, scores ):
    print( (msg) )
    print( '===================' )
    print( 'Score:' )
    print( 'Player 1: %d' % scores[0] )
    print( 'Player 2: %d' % scores[1] )
    print( 'Total game played: %d' % times )
    print( '' )

def victor( inputs ):
    results = ( ('rock', 'scissors'), ('scissors', 'paper'), ('paper', 'rock') );

    for (a, b) in results:
        if a == inputs[0] and b == inputs[1]:
            return 1
        if b == inputs[0] and a == inputs[1]:
            return 2
    return 0

def play(times, scores):
    inputs = ['', '']

    for (i, choice) in enumerate(inputs):
        prompt = '>>Player %d? ' % (i + 1)
        choice = input(prompt).lower()
        if choice == '-1':
            return False
        inputs[i] = choice

    result = victor(inputs)

    if result == 0:
        print_results('Tie', times, scores)
    else:
        scores[result - 1] += 1
        print_results('Player %d wins' % result, times, scores)

    times += 1

    return True


print('''Welcome to play Rock, Paper, Scissors game. Enter -1 to end''')

scores = [0, 0]
times = 0

while play(times, scores):
    pass

if scores[0] == scores[1]:
    player = 'Tie'
else:
    if scores[0] > scores[1]:
        i = 1
    else:
        i = 2
    player = 'Player %d' % i

print( '*******************' )
print( 'Winner: %s' % player )
print( '*******************' )

我添加了.lower(),但它仍然不起作用。它仍然显示名称错误:未定义名称“Rock”。谢谢其他两个。附加问题,当输入不是“石头”、“布”、“剪刀”时,如何显示内容。我想显示“请只输入“石头”、“布”、“剪刀”来玩游戏”。
player_1 = str(input(">>Player 1? "))
player_2 = str(input(">>Player 2? "))
player_1 = str(input(">>Player 1? "))
if (player_1=='-1'):
    print 'End of game'
    break
player_2 = str(input(">>Player 2? "))
if (player_1=='-1' or player_2=='-1'):
    print 'End of game'
    break
elif dif in [-1, 2]:
    print ('Player 1 wins.')
    score1 = score1 + 1
    showScore()
elif dif in [1, -2]:
    print('Player 2 wins.')
    score2 = score2 + 1
    showScore()
else:
    print('Tie')
    showScore()

continue

def showScore():
    print '==================='
    print 'Score:'
    print 'Player 1: ' + `score1`
    print 'Player 2: ' + `score2`
    print 'Total game played: ' + `times`
    print ''
import sys, os

def print_results( msg, times, scores ):
    print( (msg) )
    print( '===================' )
    print( 'Score:' )
    print( 'Player 1: %d' % scores[0] )
    print( 'Player 2: %d' % scores[1] )
    print( 'Total game played: %d' % times )
    print( '' )

def victor( inputs ):
    results = ( ('rock', 'scissors'), ('scissors', 'paper'), ('paper', 'rock') );

    for (a, b) in results:
        if a == inputs[0] and b == inputs[1]:
            return 1
        if b == inputs[0] and a == inputs[1]:
            return 2
    return 0

def play(times, scores):
    inputs = ['', '']

    for (i, choice) in enumerate(inputs):
        prompt = '>>Player %d? ' % (i + 1)
        choice = input(prompt).lower()
        if choice == '-1':
            return False
        inputs[i] = choice

    result = victor(inputs)

    if result == 0:
        print_results('Tie', times, scores)
    else:
        scores[result - 1] += 1
        print_results('Player %d wins' % result, times, scores)

    times += 1

    return True


print('''Welcome to play Rock, Paper, Scissors game. Enter -1 to end''')

scores = [0, 0]
times = 0

while play(times, scores):
    pass

if scores[0] == scores[1]:
    player = 'Tie'
else:
    if scores[0] > scores[1]:
        i = 1
    else:
        i = 2
    player = 'Player %d' % i

print( '*******************' )
print( 'Winner: %s' % player )
print( '*******************' )