2015-12-04 5 views
0

Я очень новичок в python и читаю информацию о python, но я борюсь с использованием значений из предыдущей функции, например. в этом случае, как я могу получить случайно сгенерированные цели дома и цели, которые будут использоваться во второй функции ?. Пожалуйста, обратите внимание, что я только начал изучать питон, поэтому мой код не будет лучшей попыткой. Любая помощь будет принята с благодарностью, поскольку я не смог найти ни одной темы, имеющей отношение к моей ситуации, спасибо.Python Множественная функция Scope

class One(): 

    def Team(home_goals,away_goals): 

     home_goals =() 
     away_goals =()   

     home_goals = round(random.uniform(0,10.0) 

     return home_goals 

     away_goals = round(random.uniform(0.1,10.0) 

     return away_goals 



    def winner(home_goals,away_goals): 

     if home_goals > away_goals 
       winner = ("home") 

     elif home_goals == away goals 
       winner = ("draw") 

     else: 
       winner = ("away") 

     print(winner) 

     return winner 
+0

все должно быть отступ один раз после того, как класса я сделал ошибку при вводе здесь. – Bob457678y

+0

Теперь отступы выглядят правильно? – senshin

+1

В python, если вы хотите вернуть две вещи, вы используете 'return a, b' не два оператора return. –

ответ

1

Просто передать результат первой функции на вторую функцию:

def score(): 
    home_goals = 2 
    away_goals = 3 
    return home_goals, away_goals 

def winner(home, away): 
    # stuff ... 
    pass 

home, away = score() 
winning_team = winner(home, away) 
0

Если вы просто ищете прямо функции, Bi-Рико имеет правильный ответ. Тем не менее, вы указываете область обзора, и ваш код выглядит так, будто он пытается стать классом. Итак, давайте построим правильный класс.

Внутри функций класса называются методами. Это своего рода фантазии способ сказать «объем этих функций находятся внутри класса„One“

import random 

class One(object): 
    home_goals =() 
    away_goals =() 

    def playGame(self): 
     self.home_goals = round(random.uniform(0,10.0)) 
     self.away_goals = round(random.uniform(0.1,10.0)) 
     return self.home_goals, self.away_goals 


    def determineWinner(self): 
     if not self.home_goals or not self.away_goals: 
      print("Teams must play game first!") 
      return None 
     if self.home_goals > self.away_goals: 
      winner = ("home") 
     elif self.home_goals == self.away_goals: 
      winner = ("draw") 
     else: 
      winner = ("away") 
     print(winner) 
     return winner 

## usage 
one_obj = One() #create instance of One() 
home, away = one_obj.playGame() 
game1 = one_obj.determineWinner() 

one_obj.playGame() #play a new game 
game2 = one_obj.determineWinner() 

Классы имеют специальную переменную под названием„я“, который является способом объект one_obj разделяет переменную home_goals и away_goals между этими двумя методами.

Если мы не использовали себя, мы должны были бы сохранить вывод от одного метода и передать их в другой.

Вы можете сделать это с помощью декоратора называется @staticmethod

import random 
# still using a class but without self 

class Two(object): 
    @staticmethod 
    def playGame(): 
     home_goals = round(random.uniform(0, 10.0)) 
     away_goals = round(random.uniform(0.1, 10.0)) 
     return home_goals, away_goals 

    @staticmethod 
    def determineWinner(home_goals, away_goals): 
     if not home_goals or not away_goals: 
      print("Teams must play game first!") 
      return None 
     if home_goals > away_goals: 
      winner = ("home") 
     elif home_goals == away_goals: 
      winner = ("draw") 
     else: 
      winner = ("away") 
     print(winner) 
     return winner 

two_obj = Two() 

home, away = two_obj.playGame() 
game1 = two_obj.determineWinner(home, away) 

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

В примере Би Рико функции находятся в области GLOBAL. В приведенных выше примерах методы (как функция в классе) находятся в рамках класса.

Можно ссылаться на статические методы без инстанцирования класса Two():

home, away = Two.playGame() 
game1 = Two.determineWinner(home, away) 
+0

, который действительно помог вам поблагодарить! – Bob457678y

+0

Рад помочь. Я настоятельно рекомендую получить PyCharm для проверки кода. Это помогло мне, когда я впервые изучил язык. Он указал на ошибки, которые я делал в коде. –

Смежные вопросы