Как изменить функции в разных файлах?

Мне любопытно, могу ли я изменить функции из разных файлов в Python.

Что делает файл psrock.py, так это то, что он получает два данных из каждого файла, которые будут сравниваться друг с другом в игре «камень, ножницы, бумага» и определять, какой игрок выиграл. Конечно, файл psrock.py содержит и другие функции, но я просто вставил одну функцию, так как другие не имеют большого значения для моего вопроса.

Я пытаюсь отредактировать функцию, которая находится в файле psrock.py, чтобы команда 3 (есть команда 1, команда 2, команда 3, и они играют в камень, ножницы, бумагу друг против друга. (т.е. команда 1 и команда 2 идут друг против друга, затем команды 1 и 3 после.наоборот)) результат всегда будет камнем, а результат противника будет ножницами, так что team3 сможет победить несмотря ни на что.

Тем не менее, я борюсь и не знаю, что делать .. :( Я едва начал изучать Python, и это довольно сложная задача для меня. Я был бы рад, если бы вы могли мне немного помочь;)

# This is a function from psrock.py file
import team3

def round(player1, player2, history1='', history2=''):

    # Get player 1's move. 
    move1 = player1(my_history=history1, their_history=history2)
    # Get player 2's move. 
    move2 = player2(my_history=history2, their_history=history1)

    if valid(move1) and valid(move2):      
        if move1 == move2:
            score1, score2 = 0, 0
        elif move1+move2 in ['rs', 'sp', 'pr']:
            score1, score2 = 1, -1
        else:
            score1, score2 = -1, 1
    else: #one of the moves was invalid
        if valid(move1): # only move2 was invalid
            move2 = 'x'
            score1, score2 = 1, -1
        elif valid(move2): # only move1 was invalid
            move1 = 'x'
            score1, score2 = -1, 1
        else: # Both moves invalid
            move1, move2 = 'x', 'x'
            score1, score2 = -1, -1

    return move1, move2, score1, score2

...И я пытаюсь отредактировать эту функцию из другого файла с именем team3...

# Team 3 File
# -*- coding: utf-8 -*-
import psrock

def round(player1, player2, history1='', history2=''):
    move1 = player1(my_history=history1, their_history=history2)
    if player1 == team3:
        move1 = 'r'
        move2 = 's'
    elif player2 == team3:
        move1 = 's'
        move2 = 'r'

Файлы:


  1. Скачать файл
  2. Извлеките zip-файл
  3. Откройте все файлы в одной вкладке
  4. Воспроизведите файл psrock_play.py

https://drive.google.com/file/d/0BxNi5bq6Cvnea0c4aVVIWUxZRUE/view?usp=sharing


person David Lim    schedule 23.05.2016    source источник
comment
Что именно вы подразумеваете под редактированием этой функции из другого файла?   -  person Jonathan March    schedule 23.05.2016
comment
@JonathanMarch Итак, в основном вы знаете, как в первом файле есть функция, которая называется round(player1, player2, history1='', history2='')? Я пытаюсь изменить то, что он делает из другого файла, когда он запускается (или что-то в этом роде), вместо того, чтобы вручную изменять то, что моя функция будет делать в файле № 1. Итак, в файле № 2 я пытаюсь сделать так, чтобы, если игрок 1 или 2 равен команде 3, это привело бы к «r» для команды 3 и «s» для другого игрока. (ход1 для игрока 1, ход 2 для игрока2.)   -  person David Lim    schedule 25.05.2016
comment
Извините за расплывчатое объяснение. Я все еще пытаюсь найти способ описать эту проблему как можно лучше. :(   -  person David Lim    schedule 25.05.2016
comment
player1 - это функция, насколько я понимаю, и как вы приравниваете ее к team3, что такое тип данных team3?   -  person Harwee    schedule 25.05.2016
comment
@Harwee Что делает функция в файле psrock.py, так это то, что она получает два файла (player1, player2) и сравнивает их результаты, как камень-ножницы-бумага. Поэтому, когда функция начинает сравнивать, я хочу, чтобы функция сделала результат файла team3 камнем, а другой игрок - ножницами, чтобы team3 всегда выигрывал игру. Я думаю, что лучше загрузить файл навеса для меня, чтобы было легче понять. (У меня небольшие проблемы с объяснением этого x()   -  person David Lim    schedule 25.05.2016


Ответы (1)


Насколько я понимаю ваш вопрос, одним из простых чистых решений может быть изменение вашей функции round таким образом, чтобы при вызове один из ее параметров был ссылкой на «функцию обратного вызова». Эта функция будет определена в модуле, вызывающем round, но фактически будет выполняться внутри round.

Дополнительные сведения о функциях обратного вызова в целом: https://en.wikipedia.org/wiki/Callback_(computer_programming)#Python Реализация обратного вызова в Python — передача вызываемой ссылки на текущую функцию или дальнейший поиск «функции обратного вызова python»

person Jonathan March    schedule 26.05.2016
comment
Это отличное решение, если бы я редактировал файл psrock.py, однако правило состоит в том, что я не могу ничего изменить в первом файле с функцией округления.. :( Большое спасибо за ваши усилия! x) Я очень ценю Это. - person David Lim; 31.05.2016