Условието можете да намерите тук. Крайния срок е 03.04.2015 17:00.
Има примерни тестове в GitHub хранилището.
Винаги преди предаване на домашно е полезно да препрочетете „Как да (не) си изпращаме задачите“.
Условието можете да намерите тук. Крайния срок е 03.04.2015 17:00.
Има примерни тестове в GitHub хранилището.
Винаги преди предаване на домашно е полезно да препрочетете „Как да (не) си изпращаме задачите“.
Знам, че е глупав въпрос, но да считаме ли следните: ы э за символи от българската азбука?
"Ако два елемента на списъка със спецификацията имат еднаква стойност за 'sequence', то те реферират към един и същи генератор, от който продължаваме „да взимаме“ стойности по-късно."
Какво се случва ако се подаде два пъти 'sequence': 'alphabet' с две различни 'letters'(примерно)? Два различни генератора?
@Николай, това са букви от руската азбука, в българския език не се ползват. В БДС разположението са включени най-вероятно по политически причини :)
@Янислав, една и съща стойност за sequence
означава една и съща инстанция на генератора. Ако при второ срещане има keyword аргументи, ги игнорирайте.
(hint: за омешване на няколко азбуки може да се възползвате от generator_definitions
)
В dict-а, който е даден за пример в генераторите с аргументи е пропуснато описването им в dict-а?!
@Eвгени , ок явно или аз не разбирам какво ми казваш или говорим за различни неща ама по-скоро е първото затова ще пробвам с пример:
a = [{'sequence': 'alphabet', 'letters': 'bggfdghjhj', 'length': 2},
{'sequence': 'alphabet', 'letters': 'сдкйбггс', 'length': 2},
{'sequence': 'alphabet', 'code': 'bg', 'length': 2},
{'sequence': 'alphabet', 'code': 'lat', 'length': 2},
]
print(list(intertwined_sequences(a)))
Какво се очаква да се изведе на екрана?
['b','g','с','д','a','б','a','b'] ?
Можем ли да използваме помощни функции като например за проверка дали число е просто(понеже не намерих вградена, която да използваме) и ако да, има ли значение дали е глобално дефинирана или да я сложим в тялото на съответната функция, за която е помощна?
@Тачо , със сигурност може да ползваш помощни функции. Koлкото до това дали е глобално дефинирана или в тялото на функцията ще оставя на теб да видиш кое е по-"питонското" ;)
Как да направя Sublime 3, като build-на и да работи с UTF-8, защото получавам следната грешка [Decode error - output not utf-8] ?
@Янислав
Това което разбирам от отговора на @Евгени и твоят пример който си дал, то резултатът трябва да бъде:
['b', 'g', 'g', 'f', 'd', 'g', 'h', 'j']
Все пак ще се радвам някой да потвърди :)
Ръководейки се от примера за генератори с аргументи, ако има аргумент, то ключът му 'num'
ли ще бъде ?
@Илиян, името на keyword only аргумента може да е каквото и да било, всъщност е в реда на нещата да има повече от един. Съответствието между дефиницията на генератора и подаденото нещо в списъка с дефиниции е грижа на хората, които ще ползват intertwined_sequences
. Имплементацията ти трябва да не се интересува как се казват аргументите, а просто да предава всичко различно от 'sequence'
и 'length'
към генератра определен в generator_definitions
.
Няма ли да се получи, че ако генератора приема няколко аргумента, реално няма да знаем в какъв ред да ги подадем ?
Един въпрос от мен: Аз съм със Sublime Text Build 3083. Python 3.4.3 Когато се опитам да принтирам буква от българската азбука не ми принтира нищо. Как това може да се оправи? (така че да е portable, т.е. ако се отвори на друг sublime без допълнителни настойки да работи?)
@Мартин , за да бъде portable , не мисля , че може , тък като проблема не е в кода ти(най-вероятно) ,а е в самият encoding на Sublime build системата ти(поне до колкото знам е така). За да оправиш този проблем , си направи нова билд система или просто добави реда при текущата ти.
"env": {"LANG": "en_US.UTF-8", "PYTHONIOENCODING": "UTF-8"}
ако все пак не знаеш за какво говоря все още следвай инструкциите надолу :)
Tools -> Build System -> New Build System
Това ще ти отвори нов файл , който е именуван untitled.sublime-build - супер.В него би трябвало да има :
{
"shell_cmd": "make"
}
Ако работиш на UNIX базирана операционна система трябва да го промениш на:
{
"shell_cmd": "python -u \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"LANG": "en_US.UTF-8", "PYTHONIOENCODING": "UTF-8"}
}
Aко си на Windows трябва да го промениш на:
{
"cmd": ["c:/Python34/python.exe", "-u", "$file"], #обикновенно това е пътя към Python , ако твоят е друг просто смени този("c:/Python34/python.exe") с твоят.
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"LANG": "en_US.UTF-8", "PYTHONIOENCODING": "UTF- 8"}
}
Запазваш файла(съветвам те името да ти подсказва за какъв език е build системата(примерно python3) ). И после трябва да избереш да билдваш файловете си с нея.Ако И това не работи пии една студена вода и ако ме видиш по време на лекция ела ще го оправим ;)
Интересни работи, който да забележим от поста: Всички sublime-settings/build-settings трябва да бъдат валиден JSON , което означава , че всички стрингове в тях трябва ДА бъдат С "" , а не с '' въпреки , че и двете са валидни стрингове в python.
Ако все пак нещо не си разбрал драсни един коментар ще видим какво ще направим по въпроса :D
@Илиян, отговорът може да се синтезира до силно наблягане на словосъчетанието keyword only аргументи :)
Генераторите, които ще бъдат подадени в първия аргумент на intertwined_sequences
глобално дефинирани ли ще са?
@Георги, усещам какво имаш предвид и не. :)
Написах го вече в един коментар, да го кажа и тук в прав текст:
Извикване на eval
в решение автоматично води до нула точки, без значение колко теста минават. :)
Ако имаме две извиквания с един и същ стринг letters продължаваме от където сме стигнали или започваме отново? В този случай:
a = [{'sequence': 'alphabet', 'letters': 'абвгд', 'length': 1},
{'sequence': 'primes', 'length': 1},
{'sequence': 'alphabet', 'letters': 'абвгд', 'length': 1},
{'sequence': 'primes', 'length': 1},
]
print(list(intertwined_sequences(a)))
кое от двете трябва да върне? Това: [а, 2, а, 3]
ли това: [а, 2, б, 3]
По-скоро второто- [а, 2, б, 3]
. Като се има предвид един от отговорите на @Евгени:
@Янислав, една и съща стойност за sequence означава една и съща инстанция на генератора. Ако при второ срещане има keyword аргументи, ги игнорирайте. (hint: за омешване на няколко азбуки може да се възползвате от generator_definitions)
А и щом това:
a = [{'sequence': 'alphabet', 'letters': 'bggfdghjhj', 'length': 2},
{'sequence': 'alphabet', 'letters': 'сдкйбггс', 'length': 2},
{'sequence': 'alphabet', 'code': 'bg', 'length': 2},
{'sequence': 'alphabet', 'code': 'lat', 'length': 2},
]
print(list(intertwined_sequences(a)))
извежда това:
['b', 'g', 'g', 'f', 'd', 'g', 'h', 'j']
би трябвало при твоя пример да е второто.
Да разбираме ли, че като аргументи на intertwined_sequences ще можем да подаваме задължително 1 или 2 аргумента, като вторият е опционален?
Винаги ли на фукцията alphabet очакваме поне 1 правилно подаден keyword аргумент, а ако не - какво се очаква да се случи тогава?
@Милка, от условието:
Ако генератор в generator_definitions се нуждае от аргументи, то те задължително ще имат зададена стойност в първото срещане на генератора в списъка дефиниращ поредността.
Тоест при първото срещане на генератора ще имаш задължително всички нужни аргументи, а при следващи срешания може и да липсват някои/всички.
@Янислав Василев:
Аз това с build системата го бях оправил.
Въпросът ми беше дали тези редове по някакъв начин могат да се сложат в .py файла и да повлияят на build системата(т.е. решението да е portable).
И благодаря за изчерпателния отговор. :)
И още нещо:
Тези настройки след като съм ги направил и предам решението, тестовете при тях ще минават ли при проверката?
Някой може ли да потвърди , че примера след забележката и този с безкрайният генератор са правилни?
@Янислав, потвърждавам.
@Янислав, според мен са правилни. Като разгледаме този:
>>> list(intertwined_sequences([
... {'sequence': 'up_to_ten', 'length': 6},
... {'sequence': 'down_from_ten', 'length': 3},
... {'sequence': 'up_to_ten', 'length': 4},
... {'sequence': 'down_from_ten', 'length': 7},
... ], generator_definitions={
... 'up_to_ten': lambda: range(1, 11),
... 'down_from_ten': lambda: range(10, 0, -1)
... }))
При първото срещане на up_to_ten
и down_from_ten
очевидно трябва да върне числата от 1 до 6 и от 10 до 8(вкл.). При следващите извиквания те трябва да продължат да генерират от там, откъдето са спрели, т.е. up_to_ten
ще трябва да генерира [7, 8, 9, 10]
, а down_from_ten
ще трябва да генерира от 7 до 1. Получава се точно това, което е дадено за отговор.
За този:
intertwined_sequences(
[
{'sequence': 'multiples_of', 'length': 5, 'num': 12},
{'sequence': 'ones', 'length': 3},
{'sequence': 'multiples_of', 'length': 3}
],
generator_definitions={
'multiples_of': multiples_of,
'ones': ones
}
)
При първото срещане на multiples_of
ще трябва да върне [12, 24, 36, 48, 60]
, после [1, 1, 1]
и след това пак като срещне multiples_of
ще трябва да продължи от там, от където е спряло, т.е. ще трябва да генерира [72, 84, 96]
.
Според мен трябва да е така.
П.С. Упсс, докато го напиша са го отговорили
@Милка, приемайте, че всяко извикване на alphabet
ще има поне един от двата подадени аргумента. В тестовете няма да ви подаваме некоректни данни.
"Аргумента подаден на intertwined_sequences може да бъде безкраен генератор"
...
"Приемете, че intertwined_sequences никога няма да бъде извикан с невалидни аргументи, т.е. нещо различно то списък в дефинирания формат за първи аргумент и опционално dict за generator_definitions. "
Тук има малко противоречие и искам да помоля за малко повече разяснение за този безкраен генератор.Получаваме аргумент, който е или списък [+ речник], или безкраен генератор. Не виждам смисъл в това да получим готов генератор, върху който да не правим нищо.Или искате да кажете, че primes и fibonacci трябва да е възможно да бъдат безкрайни генератори?
@Стилиян , това имах предвид с моя въпрос.
Трябва да сте влезли в системата, за да може да отговаряте на теми.