@akaSmoke

Как присвоить стоке атрибуты метода?

Здравствуйте. Я начал изучать Python, и в качестве практической цели поставил создание игры. Это большая задача, решение которой, как мне кажется, закрепит те крохи знаний которые я получаю.
Заранее извиняюсь за, возможно, неправильно сформированный вопрос и возможную путаницу в понятиях, но как точнее описать я не придумал.
В общем есть следующая проблема.
Есть совершенно условный метод класса с некоторыми значениями, так же есть файл со строкой (строками) которой присвоены значения данного метода. Суть такова что я с помощью модуля "random" вставляю случайную строку из файла, этой строке хочу присвоить атрибуты метода, но как это сделать не знаю.

Python 3.5

import random


class battle_param :
    def __init__(self, health, streight, agility):  #инициализация
        self.health = health # здоровье
        self.streight = streight # сила
        self.agility = agility # ловкость

mob_list = open('mob_list.py', 'r')                         #чтение из файла (не нужно)

random.seed (version=2)
x = random.choice ([line for line in open('mob_list.py')]) #загрузка 1 случайного монстра
y = random.choice ([line for line in open('mob_list.py')]) #загрузка 2 случайного монстра


if x.agility > y.agility:                                 #если ловкость первого больше чем второго
    while x.health != 0 or y.health != 0 :                #здоровье монстров не равно нулю
       y.health - x.streight                              #здоровье второго минус сила второго
       x.health - y.streight                              #здоровье первого минус сила второго
       if x.health  == 0:                                 #смерть одного из монстров
           print ("First Win",y.health)                   #Вывод
           break
       else:
           print (" Win", x.health)
           break

else:
    while x.health != 0 or y.h != 0:
        y.health - x.streight
        x.health - y.streight
        if x.health == 0:
            print("Second Win" + y.health)
            break
        else:
            print("First Win" + x.health)
            break


Файл из которого пытаюсь взять строки выглядит так

kot = battle_param (12,3,5)
neko = battle_param (15,5,3)
pes = battle_param (12,3,5)
nepes = battle_param (15,5,3)
buka = battle_param (12,3,5)
chashka = battle_param (15,5,3)


Ошибка:
line 17, in module
if x.agility > y.agility: #если ловкость первого больше чем второго
AttributeError: 'str' object has no attribute 'agility'


Буду благодарен, если ответ будет дан ссылкой на мануал, который надо курить. Желательно на русском. И пожалуйста, если уведите еще какие то ошибки - укажите.
Спасибо.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
sim3x
@sim3x
Для начала - выучить базовый синтаксис
https://learnpythonthehardway.org/book/

Сейчас не имеет смысла указывать на ошибки

После изучения синтаксиса перечитай свой вопрос
Постарайся не убить себя фейспалмом
Ответ написан
Комментировать
qlkvg
@qlkvg
python backend developer
Все очень плохо.
У вас в текстовом файле находится инициализационый код для экземпляров класса. Вы их загружаете как текст. Соответственно все, что происходит - это выбор случайной строки. Вам надо текстом хранить описание параметров объектов(как json, csv, что угодно ещё машиночитаемое), выгружать их и создавать объекты в соответствии с ними. В остальном тоже все плохо.
1) имена классов пишутся с большой буквы (гуглить pep8 и учить наизусть)
2) используйте менеджер контекста для работы с файлами, либо какой нибудь fileinput, но никак не open
Ну и читайте основы. Лутца там, dive into python, что больше понравится
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы