Четвъртото ви задание вече е публикувано. Имате една седмица за него. Отново напомняме как да (не) си изпращате задачите.
Примерния тест можете да намерите в GitHub хранилището.
Четвъртото ви задание вече е публикувано. Имате една седмица за него. Отново напомняме как да (не) си изпращате задачите.
Примерния тест можете да намерите в GitHub хранилището.
Струва ми се, че на hostname за "Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви" трябва да са още две или три малки или главни букви накрая, за да може да се разпознават и неща от типа .com, а не само .bg, а и примера foo.bar.baz не би бил валиден ако завършва точно с 2 малки или главни букви.
Също така в примерния тест има solution.Validations.is_date_time('2012-11-19 19:00:00')), а в условието е дадено Validations.is_datetime(value) # => True or False. В реалните тестове как се очаква да се казва функцията is_date_time или is_datetime?
И един въпрос: където пише, че може да са букви и цифри (примерно за hostname - Валидно име на домейн или поддомейн: започва с цифра, малка или главна буква следват до 62 цифри, малки или големи букви или тире)
можем ли да ползваме \w, което разпознава и _ или трябва да приемем, че \w не върши работа и да си пишем [a-zA-Z0-9]?
А може ли, все пак, да качите последната лекция, за да си напиша домашното ? :D
Струва ми се, че на hostname за "Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви" трябва да са още две или три малки или главни букви накрая, за да може да се разпознават и неща от типа .com, а не само .bg, а и примера foo.bar.baz не би бил валиден ако завършва точно с 2 малки или главни букви.
Изрично сме указали, че сме опростили изискванията. Има и домейни .museum :) И това не важи само за домейните. Хвани тези за имейл, примерно. Има напълно валидни имейли в реалния свят, които няма да бъдат разпознати като такива от вашето решение.
Също така в примерния тест има solution.Validations.is_date_time('2012-11-19 19:00:00')), а в условието е дадено Validations.is_datetime(value) # => True or False. В реалните тестове как се очаква да се казва функцията is_date_time или is_datetime?
Прав си. Моя грешка, поправих я. Методът трябва да бъде is_datetime
.
можем ли да ползваме \w, което разпознава и _ или трябва да приемем, че \w не върши работа и да си пишем [a-zA-Z0-9]?
След като ще хване повече от указаното, не можете :)
А може ли, все пак, да качите последната лекция, за да си напиша домашното ? :D
Последната лекция е качена.
Всеки hostname е съставен от 0 или повече поддомейна и един домейн, разделени със символа . ... общата дължина трябва да е между 1 и 63 символа
На целия домейн с всички под домейни заедно ли се има предвид или по отделно за всяка част ?
Според правилата описани за телефонен номер излиза че 00000000000 (интернационален формат започващ с 2 нули международен код 000 и още 6 нули) не е валиден телефонен номер, но същият брой нули с интервал след първата 0 0000000000 e валиден локален номер ? Правилно ли съм разбрал ?
На целия домейн с всички под домейни заедно ли се има предвид или по отделно за всяка част ?
Е, така си изкарал нещата от контекста, че са неразбираеми :D
общата дължина трябва да е между 1 и 63 символа
това важи само за всеки домейн и поддомейн. Точките между тях не ги броим. Демек може да имаш {поддомейн1}.{поддомейн2}.{домейн}.bg и дължината на всеки един от тях може да е до 63 символа. Общо с точките между тях и TLD-то стават 194 символа.
Според правилата описани за телефонен номер излиза че 00000000000 (интернационален формат започващ с 2 нули международен код 000 и още 6 нули) не е валиден телефонен номер, но същият брой нули с интервал след първата 0 0000000000 e валиден локален номер ? Правилно ли съм разбрал ?
Да.
Всеки от 4те байта в IP адрес трябва ли да отговаря на правилата за цяло число от условието?
Да.
Защото примерно в Python интерпретатора цяло десетично число 0 е и произволен брой нули което не е валидно според условието.
Факт, не е валидно :)
Може ли да обясните малко по-добре (по-ясно/по-просто) какво трябва да представлява Hostname, какво е TLD и защо foo.bar.baz е валидно след като сте написали
Валидно TLD: две или три букви, малки или главни опционално, символ . и още две малки или главни букви
П.П Ако може да допълните обясненията с валидни и невалидни примерчета, за да се хване логиката, ще е най-добре. Благодаря предварително :)
опционално, символ . и още две малки или главни букви
т.е. не е задължително да има . и още две малки или главни букви накрая, може да завършва на три букви
TLD - http://en.wikipedia.org/wiki/TLD
примери - валидни: some-thing.co.uk something.com something.bg some-third-thing.com.tt
TLD - co.uk com bg com.tt
невалидни: not-valid.co.notuk not-valid-2.word
тук TLD-тата са co.notuk word
Класът PrivacyFilter
трябва ли да променя стринга, който му е подаден или само да върне някаква негова променена версия?
@Стефани, низовете са immutable, няма как да ги промениш и да искаш.
@Никола, мисля, че Стефани имаше предвид, дали изобщо да пази първоначално подадения стринг или просто да го замени с вече филтрирания. Отговорът ми е: Пази си аргумента такъв, какъвто ти е подаден.
Представи си следния сценарий:
PrivacyFilter
partially_preserve_email_username
, примерноfiltered
filtered
:)
Още няколко въпроса:
Телефонен номер ... в интернационален формат, започва с 00 (след граница на дума) или + и следват една до три цифри международен код, без разделители в тях; международният код не може да започва с 0
EGN 8510135927 -> EGN 851[PHONE]
.Validations ... Този клас или модул трябва да предоставя няколко "класови" метода, които да ни позволят да извършваме проста валидация на текстови данни. Всички методи са тип предикат и трябва да връщат задължително или True, или False.
Това може би означава че в примерният тест вместо
def test_returns_boolean_True_or_False(self):
self.assertTrue(solution.Validations.is_email('foo@bar.com'))
self.assertFalse(solution.Validations.is_email('invalid@email'))
e по подходящо да бъде:
def test_returns_boolean_True_or_False(self):
self.assertTrue(isinstance(Validations.is_email('foo@bar.com'), bool))
self.assertTrue(isinstance(Validations.is_email('invalid@email'), bool))
"Класови" нарочно е сложено в кавички за да не се възприема буквално в контекста на Python? Спокойно могат да бъдат и статични?
Съзнателно се допускат дати от типа на 2014-02-31 като част от опростяването на правилата?
И аз имам въпрос :)
0001 е валидна година нали?
Може ли да считаме че винаги телефонен номер и email адрес започват/свършват след/преди граница на дума с изключение когато телефона започва с + което не може да бъде граница на дума? Или поне когато телефона е в локален формат също да започва след граница на дума защото инъче можем да имаме EGN 8510135927 -> EGN 851[PHONE].
Да.
Относно тестовете: Валидна забележка.
"Класови" нарочно е сложено в кавички за да не се възприема буквално в контекста на Python? Спокойно могат да бъдат и статични?
Не. Имаме предвид да classmethod
.
Съзнателно се допускат дати от типа на 2014-02-31 като част от опростяването на правилата?
Да.
0001 е валидна година нали?
Да.
Малко тестове от мен.
@Цветелина
Сигурна ли си, че Validations.is_date('0000-11-19') трябва да върне False? Аз не виждам в условието нещо да забранява 0000 като година.
Ами не съм сигурна за 0000, но май си прав и трябва да е валидна
0000 си е напълно валидна година :)
A -0
валидно число / integer ли е?
>>> type(-0)
<class 'int'>
Да речем че имаме телефона 0037288888888 в интернационален запис, тогава кое е кода на държавата - 3, 37 или 372?
Има случаи .в които това може да се определи със сигурност, примерно 0035799999999999, защото 9-ките са 11 на брой,или 003555555, но в общия случай...
Международните кодове са така избрани, че да няма възможност за объркване. Например има код 20 Египет, но няма 21, защото има 4 държави с код 21* (212 - Мароко, 213 - Алжирия, 216 - Тунис, 218 - Либия). Според мен единственият начин да се избегнат тези проблеми е да се направи регулярен израз, който разпознава всички възможни международни кодове (т.е. такъв, който няма да разпознае 214, защото не съществува). Аз лично ползвах http://countrycode.org/ за информация.
Никой няма да си играе да въвежда кодовете на 200 държави Дори ако ги имаме в някакъв лист и проверяваме от там, вече отиваме на проверки различни от regex...
Нали точно затова са ти регулярните изрази.. за да не въвеждаш всичко 1 по 1, а само как трябва да изглежда. Има начин да го коуднеш без да пишеш всички 200 държави поотделно.
А трябва ли очакваме whitespace преди/след края на имейла, тъй като например в този случай: 2@3someone@example.com.haha -> 2@[EMAIL].haha и това няма да бъде хванато от граница на дума, защото точката се брои за граница?
P.S След като Markdown и той се лъже може би не се очаква :D
От условието(за телефонния номер и същинската му част):
Това означава ли,че ако имаме My phone is 08398349349(space) или My phone is +359 (47)(74)(38)(39) това ще си остане така,а не My phone is [PHONE]?Тоест има се предвид,че за всичките изброени разделители по-горе в условието (,),- и интервал телефонния номер ще си остане непроменен?
Аз го разбирам като да не разпознаеш (space) и ) като част от телефонния номер и да върнеш My phone is [PHONE](space) и My phone is [PHONE]).
Демек и за това:в локален формат, започва с 0, която не е предшествана от друга цифра, буква или символ +; след тази начална 0 не може да следва друга 0 ,ако имам например My phone is +0893898889 няма да си остане непроменено,ами ще е My phone is +[PHONE] ?...
Мисля, че това в локален формат, започва с 0, която не е предшествана от друга цифра, буква или символ +; след тази начална 0 не може да следва друга 0 се отнася за Validations.is_phone(phone_number) и съответно то Validations.is_phone('+0893898889') ще ти върне False, но във PrivacyFilter би трябвало плюсът да не се счита за част от номера, тъй като аз не видях в условието да пише, че filtered() трябва да разпознава номера, отделени по някакъв начин от останалата част от текста. Т.е. ако приемем, че PrivacyFilter('My phone number is:0897323921').filtered() връща 'My phone number is:[PHONE]', то както : не се смята за част от номера, така и + не трябва да се смята.
Вярно е обаче, че в примера filter = PrivacyFilter('Phone: +35925551212') номерът е разделен с интервал, а няма пример, в който това да не е така, така че може и да разсъждавам грешно.
Прочетох всичко написано до тук и не видях на някой да му прави впечатление за IPv4 адреса, че може да започва с нула :D Специално за задачата ли да го приемаме така(за улеснение предполагам)
Трябва да сте влезли в системата, за да може да отговаряте на теми.