Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2016 14:22:31

Ivannn
Зарегистрирован: 2016-05-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

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

import unittest
class Calendar:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
    def get_year(self):
        year = self.year
        return year
    def get_month(self):
        month = self.month
        return month
    def get_day(self):
        day = self.day
        return day
date = Calendar(2020, 44, 12)
yyyy = date.get_year()
mm = date.get_month()
dd = date.get_day()
result = str(yyyy) + "-" + str(mm) + "-" +  str(dd)
class Test(unittest.TestCase):
    def is_correct(self):
        if len(yyyy) != 4 and not yyyy.isdigit():
            return False
        elif len(mm) != 1 and not mm.isdigit():
            return False
        elif 31 < len(dd) < 1 and not dd.isdigit():
            return False
        elif (mm == 2 and dd > 28) and ((mm == 4 or 6 or 9 or 11) and dd > 30):
            return False
        else:
            return True
    def test_validation(self):
        self.assertTrue(result.is_correct(), True)
if __name__ == "__main__":
    unittest.main() 

Отредактировано Ivannn (Май 22, 2016 18:59:08)

Офлайн

#2 Май 22, 2016 14:52:54

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Ну собственно а вопрос в чем? В чем помогать?
p.s.
Код принято оборачивать в теги см кнопочку <>



Офлайн

#3 Май 22, 2016 14:56:51

Ivannn
Зарегистрирован: 2016-05-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Не запускается - выдает self.assertTrue(result.is_correct(), True)
AttributeError: ‘str’ object has no attribute ‘is_correct’

Офлайн

#4 Май 22, 2016 17:19:08

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

Прошу великодушно помочь с задачкой.

В каком питоне вы такое нашли?




Офлайн

#5 Май 22, 2016 22:49:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Ivannn
def test_validation(self):
        self.assertTrue(result.is_correct(), True)
Ну и правильно result это строка у нее нет метода is_correct. Ровно что вам и написали. Этот тест у вас кривой.



Офлайн

#6 Май 22, 2016 22:54:58

Ivannn
Зарегистрирован: 2016-05-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

да я знаю, что кривой, я только учусь. Не подскажете как мне сделать объект, в котором были бы все числа даты, что бы применить метод is_correct для проверки?

Офлайн

#7 Май 22, 2016 23:51:03

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Ivannn
Не подскажете как мне сделать объект
Если я вас правильно понял, то надо перенести is_correct в Calenda. При этом вы еще нарушаете краеугольный камень тестирования. Тесты должны быть независимы. Поэтому в вашем случае конечно не должны опираться на глобальные объекты date yyyy и тому подобное.



Офлайн

#8 Май 23, 2016 00:48:17

Ivannn
Зарегистрирован: 2016-05-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Переделал немного:

import unittest
class Calendar:
    def get_year(self):
        year = self.year
        return year
    def get_month(self):
        month = self.month
        return month
    def get_day(self):
        day = self.day
        return day
    def is_correct(self):
        if len(str(d.get_year())) != 4 and not str(d.get_year).isdigit():
            return False
        elif len(str(d.get_month())) != 1 and not str(d.get_month()).isdigit():
            return False
        elif 31 < len(str(d.get_day())) < 1 and not str(d.get_day()).isdigit():
            return False
        elif d.get_month == 2 and d.get_day > 28:
            return False
        elif  d.get_month == 4 or 6 or 9 or 11 and d.get_day > 30:
            return False
        else:
            return True
d = Calendar()
class Test(unittest.TestCase):
    def test_validation(self):
        d.year = 2020
        d.month = 7
        d.day = 25
        date = (d.get_year(), d.get_month(), d.get_day())
        self.assertTrue(date.is_correct(), True)
if __name__ == "__main__":
    unittest.main()

Всё равно ошибка:
self.assertTrue(date.is_correct(), True)
AttributeError: ‘tuple’ object has no attribute ‘is_correct’
Подскажите пожалуйста как это устранить.

Отредактировано Ivannn (Май 23, 2016 00:52:22)

Офлайн

#9 Май 23, 2016 05:32:21

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Ivannn
date = (d.get_year(), d.get_month(), d.get_day())
self.assertTrue(date.is_correct(), True)

Ivannn
self.assertTrue(d.is_correct(), True)



Офлайн

#10 Май 23, 2016 14:32:27

Ivannn
Зарегистрирован: 2016-05-22
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу великодушно помочь с задачкой.

Doza_and, благодарю! Задачу решил, можно закрывать тему.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version