2016-05-23 1 views
0

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

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

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

Однако я борюсь и не знаю, что делать .. :(Я едва начал изучать 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. Extract почтовый файл
  3. Открыть все файлы в той же вкладке
  4. Играть psrock_play.py файл

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

+0

Что именно вы имеете в виду под «редактировать эту функцию из другого файла»? –

+0

@JonathanMarch Итак, вы знаете, как в первом файле есть функция, которая называется «round (player1, player2, history1 = '', history2 = '')? Я пытаюсь изменить то, что он делает из другого файла, когда он запускается (или что-то в этом роде), вместо того, чтобы вручную изменять то, что моя функция будет делать в файле # 1. Так что в основном в файле # 2, я пытаюсь сделать так, чтобы, если игрок 1 или 2 равен команде3, это приведет к «r» для команды 3 и «для» другого игрока. (move1 для игрока 1, переход 2 для игрока2.) –

+0

Извините за смутное объяснение. Я все еще пытаюсь найти способ описать эту проблему как можно лучше. :( –

ответ

0

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

Более подробной информации о функциях обратного вызова в целом: https://en.wikipedia.org/wiki/Callback_(computer_programming)#Python Implementing a callback in Python - passing a callable reference to the current function или дальше искать «питон функцию обратного вызова»

+0

Это отличное решение, если я должен был отредактировать файл psrock.py, однако правило состоит в том, что я не могу ничего изменить из первого файла с помощью круглой функции. :(Благодарю вас за ваши усилия, хотя! X) Я очень ценю это. –