Прежде всего, вы не должны добавлять теги python 2.x и python 3.x к одному и тому же вопросу. Для простоты я попробовал ваш код на 3.x, и он частично работает. Во-вторых, опишите вашу проблему. Не просто пишите "не будет бегать по какой-то причине". В-третьих, опишите, чего вы хотите достичь. Я сделаю это для вас в качестве примера.
Ваша игра работает следующим образом:
Определите, что компьютер делает (работает)
Спросите, что делает игрок (работает частично)
Сравните действия игрока и компьютера и результат печати (не работает)
Начните с 1 (не работает)
Ваша первая проблема - это цикл while, вы должны сделать что-то вроде этого:
while True:
Почему? Вы хотите бесконечный цикл, только если игрок вводит неправильное действие, а затем вы хотите принудительно завершить цикл, вы делаете это с помощью оператора «break».
Ваша вторая проблема - вы используете слишком многоконструкции if-else вам не нужно так много для обработки всех случаев. Вот мой рабочий код Python 3:
from random import randint
import sys
l2 = ["Rock", "Paper", "Scissors"]
computer = None
player = None
wins = 0
losses = 0
ties = 0
def win():
global wins
wins += 1
print("You win")
def loss():
global losses
losses += 1
print("You lose")
def tie():
global ties
ties += 1
print("Game ended with a tie")
while True:
# determine computer action
computer = l2[randint(0,2)]
player = input("Choose your action. Possible values are Rock, Paper or Scissors.\n")
if player not in l2:
print("Invalid choice, game will end now.")
print("You won {0} games and lost {1} games, {2} game(s) ended with a tie.".format(wins, losses, ties))
# ending the loop
break
if player == computer:
tie()
elif player == "Rock":
if computer == "Paper":
win()
else:
loss()
elif player == "Paper":
if computer == "Scissors":
loss()
else:
win()
elif player == "Scissors":
if computer == "Rock":
loss()
else:
win()
Если у вас есть какие-либо вопросы, задавайте.
Редактировать: Вам также следует подумать о перемещении функций и основного цикла в свои собственные (игра), тогда вам не нужен уродливый «глобальный» оператор для доступа к переменным.