Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 13, 2015 15:17:43

7slon7
Зарегистрирован: 2014-12-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос с классами

Добрый день.
Помогите разобраться.
Изучаю классы на практике и хочу реализовать игру “кости” с их помощью. Задумка такая, при входе, идет приветствие, далее вопрос о количестве играков, вводим количество играков и в зависимости от того сколько их, столько создается и объектов класса, у каждого объекта есть переменная с именем и возрастом игрока, которая задается с клавиатуры. Создаю класс для объектов:

class Player(object):
    def __init__(self, name, age):
        self.name = name
        self.age= age
    def __str__(self):
        rep = "New player %s, %s age" %(self.name, self.age)
        return rep
    def name(self):
        self.name = input("Enter name new player: ")
        self.age= input("Enter he/she age: ")
        return (self.name, self.age)
ниже у меня есть ф-ия, которая запускает игру:
def start_game():
    print("Hello, welcom to new game - dist")
    players_num = int(input("How many players will play: "))
#    if not players_num.is_digit():
#        raise Exception("Incorrect number of players")
    players = [Player(). for i in range(players_num)]
    l_players = list(enumerate(players, start=1))
    print(l_players)
    return players_num, l_players
но как передать в конструктор имя для переменных name и age ? если вынести метод name из класса, и при запуске изначально этого метода, тогда я не понимаю, куда и как нужнжо передать эту функцию, что бы коннструктор получил name и age
покажите ресурс, где будет доступно расказано о такой ситуации, либо наведите на мысль
спасибо

Отредактировано 7slon7 (Авг. 13, 2015 16:01:03)

Офлайн

#2 Авг. 13, 2015 17:25:03

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

вопрос с классами

 player = Player(name, age)



Офлайн

#3 Авг. 14, 2015 01:06:10

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

вопрос с классами

7slon7
покажите ресурс, где будет доступно расказано о такой ситуации
David Ascher and Mark Lutz, Learning Python, 5th Edition



Офлайн

#4 Авг. 14, 2015 14:27:48

7slon7
Зарегистрирован: 2014-12-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос с классами

немного уточню вопрос: в ф-ии start_game()

players = [Player.names() for i in range(players_num)]
создается объект класса players , который обращается к методу класса names() :
str
    def names():
        name = input("Enter name new player: ")
        old = input("Enter he/she old: ")
        return (name, old)
, который предлагает ввести имя и возраст, вопрос, к этому времени конструктор уже отработал ? если да, по получается, что он не получил свои значения self.name = name и self.age= age , тогда как его заставить эти значения получить ? или из-за того, что и метод и конструктов в классе ссылаются на один объект, конструктор возмет имя и возраст у метода names() по умолчанию ? и как затем заставить отработать метод __str__ , который должен выводить приветствие вновь созданному играку, судя по тому, что он выводит какую, то абра-кадабру либо ошибку, в конструктор имя и возраст, вновь созданного игрока, от метода names() не попадает
прошу помощи разобраться

Отредактировано 7slon7 (Авг. 14, 2015 14:29:44)

Офлайн

#5 Авг. 14, 2015 14:42:43

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

вопрос с классами

Городите.
Во-первых, __init__ - это не конструктор. Это инициализатор, который вызывается автоматически каждый раз после создания объекта.
Во-вторых, если у вас инит задан так

def __init__(a, b):
    pass
а объект вы создаете так
obj = MyClass()
то вы получите ошибку времени выполнения.
7slon7
тогда как его заставить эти значения получить
Вопрос потрясающе нелогичный. Чтобы передать в функцию параметры, их надо тупо туда передать.
obj = MyClass(a, b)



Офлайн

#6 Авг. 14, 2015 16:03:32

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

вопрос с классами

7slon7
и хочу реализовать игру “кости”
Первый раунд:
$ dice -n 3 -p "J.R.,7slon7"
J.R.:......13
7slon7:....8
J.R.!
Пример упорной борьбы:
$ dice -n 3 -p "J.R.,7slon7"
7slon7:....14
J.R.:......14
No winner, one more throw:
7slon7:....25
J.R.:......28
J.R.!
Матч-реванш:
$ dice -n 3 -p "J.R.,7slon7"
7slon7:....9
J.R.:......9
No winner, one more throw:
7slon7:....17
J.R.:......17
No winner, one more throw:
7slon7:....30
J.R.:......23
7slon7!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version