Вход | Регистрация

Трета задача

  • Thumbs_up

    Имате да питате нещо по трета задача — тук е мястото.

    P.S. За някои неща от задачата (TypeError и tuple(obj)) ще си говорим на лекции тази седмица ;)

    29.03.2009 (променeно 29.03.2009)
  • Thumbs_up

    Тук, както се разхождаше на 16-ти октомври 1843 Сър Уилям Роуън Хамилтон в проблясък на гениалност откри фундаменталната формула за умножение на кватерниони i² = j² = k² = ijk = −1 и я изчерта върху камъка на този мост.

    По този въпрос - приемате ли решения върху камъни? Ха-ха!

    Но по темата: Какво означава: Да имаме сравнително правилни Quaternion(e, i, j, k) и q.tuple()?

    30.03.2009 (променeно 30.03.2009)
  • Thumbs_upThumbs_up

    Какво означава: Да имаме сравнително правилни Quaternion(e, i, j, k) и q.tuple()?

    Това ще рече, че ако имаш големи бъгове в тези две "функции" едно към 90%(на око) от тестовете ти може да гръмнат, независимо че всичко останало ти е правилно.

    Просто в повечето тестове кватернион ще се създава с Quaternion(x1, x2, x3, x4) и ще се проверява състоянието му с .tuple() и когато си ги оплескал (или пропуснал да ги имплементираш) теста ще гърми...

    30.03.2009 (променeно 30.03.2009)
  • Thumbs_up

    Какво се очаква да върне

    str(Quaternion(0, 0, 0, 0))

    Празен низ (по-логично) или 0+0i+0j+0k?

    30.03.2009
  • Thumbs_upThumbs_up

    0+0i+0j+0k - не знам какво му е по-логичното на '', т.к. в условието си пише какъв е формата.

    (Още повече че str(complex()) != '')

    :)

    30.03.2009 (променeно 30.03.2009)
  • Thumbs_upThumbs_up

    Празен низ не е логично. Имаш нулев квартернион, не нищо.

    31.03.2009
  • Thumbs_upThumbs_up

    (т.к. разни хора питаха, решихме да подскажем малко)

    HINT:

    Не е задължително на направите "статичните полета" на Quaternion е, i, j, k по време на създаване на класа.

    31.03.2009
  • Трябва да имаме метод abs или метод такъв, че abs(Quaternion(1, 1, 1, 1) # 2 да работи?

    31.03.2009
  • Thumbs_up

    abs(Quaternion(1, 1, 1, 1) # 2 да работи, какъв метод трябва да дефинирате ще прецените.

    31.03.2009
  • Thumbs_up

    Когато се конструира от статичните атрибути, това какво трябва да даде?

    x = Quaternion.e
    y = Quaternion.e
    print(x == y) # True или False?
    31.03.2009 (променeно 31.03.2009)
  • Thumbs_up

    Тогава, ако имаме:

    x = Quaternion.e
    y = Quaternion.e
    print(x == y) # True или False?

    == ти е предефинирано и е True независимо дали x is y - дали е is не ни интересува, т.к. Quaternion се счита за immutable

    31.03.2009
  • Thumbs_up

    Може ли да импортваме модули (по-конкретно functools.reduce)?

    01.04.2009
  • Thumbs_up

    Може, но в Python 3.0 reduce се смята за лоша практика и препоръчват просто да си ползваш for цикъл :)

    01.04.2009
  • Thumbs_up

    p3-sample.py

    P.S. Т.к. в теста са застъпени ограничен брой функции, ако имате някакви съмнения какво трябва да ви връща дадено неща - питайте ;)

    01.04.2009
  • Thumbs_up

    В юнит-тестовете, които ще пускате върху нашия код ще има ли опити за триене на атрибути на инстанций или класове и какво трябва да е поведението тогава. По специално ме интересува този случай:

    del Quaternion.e # ..i, j, k
    02.04.2009
  • Thumbs_up

    Няма да има триене на атрибути.

    02.04.2009
  • Thumbs_up

    Вероятно е много глупав въпрос, но нещо не съм сигурен как точно трябва да представим параметрите на кватерниона. По-точно:

    #0+0i+0j+0k

    Не нулите, а тези i, j и k и '+'. Цялото като стринг или това просто показва позицията на числата?

    02.04.2009
  • Thumbs_up

    Цялото като стринг или това просто показва позицията на числата?

    От примерния тест си личи - ако са само числа ще гръмне.

    Идеята е str да връща представянето, което е използвано в статията на wikipedia (без space), като не се занимава с някакви "ексктемални ситуации" от рода на това Quaternion(0, 1, 0, 0) да се записва само с i.

    Примери:

    # валидни за str(Quaternion(1, 2, 3, 4))
    '1+2i+3j+4k'
    '1.0+2.0i+3.0j+4.0j'
    
    # валидни за str(Quaternion(-1, 1, -3, 0))
    '-1+1i-3j+0k'
    '-1.0+1.0i-3.0j+0.0k'
    
    # "'" е от repr на низа
    02.04.2009 (променeно 02.04.2009)
  • Thumbs_up

    Да, за str ми е ясно, но това:

    Quaternion(3) # 3+0i+0j+0k

    Като се абстрахираме от самите стойности - самото извикване на Quaternion(3) не създава стринг "3+0i+0j+0k", или?

    02.04.2009
  • Thumbs_up

    Като му викнеш str на Quaternion(3) ще ти върне 3+0i+0j+0k. Поне според мен :)

    02.04.2009
  • Thumbs_up

    Ха-ха-ха! Явно не мога да си задам въпроса, като хората, но все пак благодаря, мисля, че схванах как трябва да бъде.

    02.04.2009
  • Thumbs_up

    Като се абстрахираме от самите стойности - самото извикване на Quaternion(3) не създава стринг "3+0i+0j+0k", или?

    Не създава.

    Принципно с __init__ не можете върнете нещо различно от None, т.е. конструктора няма как да ви върне низ.

    (Всъщност, т.к. работим с python и това може, но как става ще ви разправяме по-нататък)

    02.04.2009
  • Thumbs_up
    # валидни за str(Quaternion(1, 2, 3, 4))
    '1+2i+3j+4k'
    '1.0+2.0i+3.0j+4.0j'

    Значи няма значение дали формата на текста, който str генерира ще има точка или не (при условие, че числото е цяло)? От условието останах с впечатление, че числа, които могат да се представят в целочислен тип не трябва да имат десетична запетая и допълнителни символи.

    Това валидно ли е:

    # str(Quaternion(1.5, 2, 3, 4.5))
    '1.5+2i+3j+4.5j' # вариант в който ".0" се изпуска
    02.04.2009 (променeно 02.04.2009)
  • Thumbs_up

    Представете квартерниона както си искате. Има ред варианти. Може дори и със низ, макар че откровенно не ви го препоръчвам :)

    02.04.2009
  • Thumbs_up

    @Лъчо

    str(Quaternion(1.5, 2, 3, 4.5)) # '1.5+2i+3j+4.5j' е валидно

    Няма значение как е представено числото стига да може да се "parse"-не от float (и да е равно на това което се очаква), т.е.:

    >>> (1 == float('1')       and
         1 == float('01')      and
         1 == float('1.')      and 
         1 == float('1.0')     and 
         1 == float('10e-1')   and 
         1 == float('10E-1')   and # и "E"
         1 == float('0.1e1')   and # и "E"
         1 == float('0.1e+1'))
    True

    (Сега ако използвате прекалено изчанчени представяния, за които не сме се сетили може и да гръмнете, но изброените горе минават)

    02.04.2009