Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2015 17:19:44

Shepard_Commander
Зарегистрирован: 2015-07-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра "Кости"

Здравствуйте, я только начал изучать python и прошу вашей помощи:

import random
def player_name():
   name1 = input("Имя первого игрока: ")
   name2 = input("Имя второго игрока: ")
   return name1, name2
def dice(sides=6):
   random.randint(1, sides)
def rolling_dices():
   roll_dice = dice()
   if roll_dice == 1:
      print("Выпали кости номиналом в один ")
   if roll_dice == 2:
      print("Выпали кости номиналом в два ")
   if roll_dice == 3:
      print("Выпали кости номиналом в три ")
   if roll_dice == 4:
      print("Выпали кости номиналом в четыре ")
   if roll_dice == 5:
      print("Выпали кости номиналом в пять")
   if roll_dice == 6:
      print("Выпали кости номиналом в шесть")
   roll_dice2 = dice()
   if roll_dice2 == 1:
      print("и один")
   if roll_dice2 == 2:
      print("и два")
   if roll_dice2 == 3:
      print("и три")
   if roll_dice2 == 4:
      print("и четыре")
   if roll_dice2 == 5:
      print("и пять")
   if roll_dice2 == 6:
      print("и шесть")
   return roll_dice, roll_dice2
def results():
   print("Игроку", name1, roll_dice, roll_dice2)
def results2():
   print("Игроку", name2, roll_dice, roll_dice2)
def main():
   player_name()
   rolling_dices()
   results()
   rolling_dices()
   results2()
main()

При запуске вылезает NameError name “name1” is not defined. В чем заключается ошибка и как ее исправить?

Отредактировано Shepard_Commander (Июль 7, 2015 17:21:13)

Офлайн

#2 Июль 7, 2015 17:41:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Игра "Кости"

def results():
   print("Игроку", name1, roll_dice, roll_dice2)
в области видимости функции results нет таких переменных



Офлайн

#3 Июль 8, 2015 16:29:27

Shepard_Commander
Зарегистрирован: 2015-07-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра "Кости"

FishHook
Спасибо, но как можно максимально эффективно использовать переменные с другой функции?

Офлайн

#4 Июль 8, 2015 16:48:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Игра "Кости"

Shepard_Commander
Спасибо, но как можно максимально эффективно использовать переменные с другой функции?
Никак. Функции - обособленные блоки кода, переменные определенные внутри функций живут только во время выполнения функции. Это концептуальное свойство. В разных языках есть всякие нюансы типа статических переменных, но одно неизменно: переменные определенные внутри функции снаружи недоступны. Представляете, что будет, если можно будет изменить внутреннюю переменную функции? Функция будет возвращать непредсказуемый результат. Такое программирование лично я в гробу бы видал.
Если вы этого хотите, значит вы крайне неправильно строите тело своей программы. Функция принимает значение и возвращает результат, в лучшем случае функция - это чёрный ящик, вы вообще не знаете как она работает, вы только пользуетесь её результатом. В худшем - функция принимает данные ссылочного типа и может их изменить, это называется побочным эффектом.
Но запомните железно: никаких мыслей о доступе к переменным определенным в теле функции, это ересь.



Офлайн

#5 Июль 8, 2015 18:18:56

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Игра "Кости"

Тут нужны объекты.

import random
class YourGreatGame:
    def __init__(self):
        pass
    def player_name(self):
       self.name1 = input("Имя первого игрока: ")
       self.name2 = input("Имя второго игрока: ")
       return self.name1, self.name2
    def dice(self, sides=6):
       return random.randint(1, sides)
    def rolling_dices(self):
       self.roll_dice = self.dice()
       if self.roll_dice == 1:
          print("Выпали кости номиналом в один ")
       if self.roll_dice == 2:
          print("Выпали кости номиналом в два ")
       if self.roll_dice == 3:
          print("Выпали кости номиналом в три ")
       if self.roll_dice == 4:
          print("Выпали кости номиналом в четыре ")
       if self.roll_dice == 5:
          print("Выпали кости номиналом в пять")
       if self.roll_dice == 6:
          print("Выпали кости номиналом в шесть")
       self.roll_dice2 = self.dice()
       if self.roll_dice2 == 1:
          print("и один")
       if self.roll_dice2 == 2:
          print("и два")
       if self.roll_dice2 == 3:
          print("и три")
       if self.roll_dice2 == 4:
          print("и четыре")
       if self.roll_dice2 == 5:
          print("и пять")
       if self.roll_dice2 == 6:
          print("и шесть")
       return self.roll_dice, self.roll_dice2
    def results(self):
       print("Игроку", self.name1, self.roll_dice, self.roll_dice2)
    def results2(self):
       print("Игроку", self.name2, self.roll_dice, self.roll_dice2)
def main():
   game = YourGreatGame()
   game.player_name()
   game.rolling_dices()
   game.results()
   game.rolling_dices()
   game.results2()
if __name__ == '__main__':
    main()

Офлайн

#6 Июль 8, 2015 18:46:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Игра "Кости"

Shaman
Тут нужны объекты.
Топикстартеру до объектов еще очень далеко, не забивайте человеку голову раньше времени.



Офлайн

#7 Июль 8, 2015 19:31:46

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Игра "Кости"

Пусть ориентируется.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version