Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс отображает работу автомата, Класс отображает работу автомата 
:(
    Опции темы
rapa
Дата 19.2.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Подскажите в чём проблема.Пишу класс,который отображает работу автомата,принимающего,
нaпример, все слова типа (ab)*.Вот код:
Код

class Automat:
    'This class is representing automat that gets all words like those (ab)*'    
    def __init__(self):
        self.state = 'start_happy'
    def analize(x):
        for inp in range(len(x)):
            if x[:inp] =='a' & state == 'start_happy':
                state = 'next'
            elif x[:inp] == 'a' & state == 'start_happy':
                state = 'fail'
            elif x[:inp] == 'b' & state == 'next':
                state = 'start_happy'
            elif x[:inp] == 'b' & state == 'start_happy':
                state = 'fail'
            else:
                print 'This letter is out of alphabet'
                state = 'fail'
        if state == 'start_happy':
            print 'YES!!'
        else:
            print 'Oh, No!!'

Но не понимаю в чём проблема??? Выдаёт вот такую ошибку:
Код

import AutomatClass
A = AutomatClass.Automat()
A.analize("abab")

Traceback (most recent call last):
File "<interactive input>", line 1, in ?
TypeError: analize() takes exactly 1 argument (2 given)
Спасибо заранее!!!
PM MAIL   Вверх
J2A
Дата 20.2.2006, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Неявно передается self. Ты ошибся, нужно писать (см. строку №5)
Код

        def method(self, arg)


Это сообщение отредактировал(а) J2A - 20.2.2006, 05:43
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
rapa
Дата 20.2.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Спасибо J2A-работает,но почему тогда когда когда я запускаю,вот так :
Код

A.analize('abab')

мне опять выдаётся ошибка:
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "AutomatClass.py", line 7, in analize
if x[:inp] =='a' & state == 'start_happy':
UnboundLocalError: local variable 'state' referenced before assignment
Ведь я же в "конструкторе" определяю state ???

Заране спасибо.
PM MAIL   Вверх
SAnty
Дата 20.2.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.2.2006

Репутация: 3
Всего: 5



state -это аттрибут класа, его инициализация происходит в конструкторе
Дальше в коде нужно поменять state на self.state
PM MAIL WWW   Вверх
rapa
Дата 20.2.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Это я уже сам понял и сделал,но вот опять после того же A.analize('abab'):
raceback (most recent call last):
File "<interactive input>", line 1, in ?
File "AutomatClass.py", line 7, in analize
if x[:inp] =='a' & self.state == 'start_happy':
TypeError: unsupported operand type(s) for &: 'str' and 'str'

PM MAIL   Вверх
setq
Дата 20.2.2006, 12:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











поменяй на and



Код
            if x[:inp] =='a' & state == 'start_happy':
                state = 'next'
            elif x[:inp] == 'a' & state == 'start_happy':  # SAME???
                state = 'fail'


То же самое условие?

Это сообщение отредактировал(а) setq - 20.2.2006, 12:54
  Вверх
rapa
Дата 20.2.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



setq, Спасибо,поменял-перестало партачить,только условие тоже нужно было поменять:
Код

elif x[:inp] == ...


на
Код

elif x[inp:inp+1] == ...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.