Простая циклическая игра "камень-ножницы-бумага" на python

Простая циклическая игра в камень, ножницы, бумага на python, не работает функция счёта, что с ней не так?

import random
game = 'y'
# score_com = 0
# score_user = 0
# score_draw = 0
while game == 'y':
    varibl = ['r', 's', 'p']
    player = input('Выберите камень (r), ножницы (s) или бумага (p)')
    comp = random.choice(varibl)
    print('Игрок выбрал: ', player, 'Компьютер выбрал: ', comp)
    def play():
        if ((player == 's') and (comp == 'p')) or ((player == 'p') and (comp == 'r')) or ((player == 'r') and (comp == 's')):
            return 'игрок'
        elif comp == player:
            return 'ничья'
        else:
            return 'комп'
    print('Победил: ', play())
    def score():
        score_com = 0
        score_user = 0
        score_draw = 0
        if play == 'игрок':
            score_user += 1 
        elif play == 'комп':
            score_com += 1
        elif play =='ничья':
            score_draw += 1
        return score_user, score_user, score_draw
    print(score())
    game = input('Играем y/n?: ')



Ответы (2 шт):

Автор решения: Dezmonder

Так у вас score нигде не хранится, кроме как в цикле, где и создаётся. Так ещё и функции каждый раз по новой описываются, каждый цикл. Вытащите это всё из цикла, будет работать корректно. Кроме того, заметил позже, вы сравниваете строку и функцию play, а не результат выполнения функции

→ Ссылка
Автор решения: mrgervant

Каждую итерацию цикла while у Вас вызывается функция score(), внутри которой значения счетчиков приводятся к нулю и высчитываются заново. Чтобы значения накапливались необходимо организовать хранение значений счёта вне функции score() и цикла while.

Поскольку это простой пример, то позволил себе как у Вас использовать глобальную переменную:

import random

game = 'y'
score = [0, 0, 0]

def set_score(position):
    score[position] = score[position] + 1

def play(player_ch, comp_ch):
    win_comb = [('r', 's'), ('s', 'p'), ('p', 'r')]
    if player_ch == comp_ch:
        return 'Ничья', 0
    elif (player_ch, comp_ch) in win_comb:
        return 'Игрок победил', 1
    else:
        return 'Компьютер победил', 2

while game == 'y':
    player_ch = input('Выберите камень (r), ножницы (s) или бумага (p): ')
    comp_ch = random.choice(['r', 's', 'p'])
    print(f'Игрок выбрал: {player_ch} | Компьютер выбрал: {comp_ch}')
    game_result = play(player_ch, comp_ch)
    print(game_result[0])
    set_score(game_result[1])
    print(f'Счёт: ничья - {score[0]} | игрок - {score[1]} | компьютер - {score[2]}\n')
    game = input('Играем y/n?: ')
→ Ссылка