Предизвикателства > Регекс за Дядо Коледа > Решения > Решението на Костадин Русалов

Резултати
0 точки от тестове
2 точки от учител

2 точки общо

0 успешни теста
3 неуспешни теста
Код

 1import re
 2
 3
 4def parse_wishlist(wishlist):
 5    groups = re.findall(r'(?:\(\s*(-?\d+(?:\.\d+)?)\s*\)\s*(.*\S)\s*\[\s*(\d+)[^]]*]\s*)?\n+\s*[-*] *(.*\S)', wishlist)
 6    parsed_wishlist = []
 7    neposlushnik = None
 8    for group in groups:
 9        if group[0]:
10            if neposlushnik:
11                parsed_wishlist.append(tuple(neposlushnik[:-1] + [tuple(neposlushnik[-1])]))
12            neposlushnik = [float(group[0]), group[1], int(group[2]), [group[3]]]
13        else:
14            neposlushnik[-1].append(group[-1])
15    return parsed_wishlist + [tuple(neposlushnik[:-1] + [tuple(neposlushnik[-1])])]

FFF
======================================================================
FAIL: test_full (test.TestRegex)
A single test to rule them all.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 121, in test_full
self.assertEqual(converted, parse_wishlist(modified_example))
AssertionError: Lists differ: [('3.14', 'Иван Иванов', '10', ('Плейстейша[110 chars]',))] != [(3.14, 'Иван Иванов', 10, ('Плейстейшан', [58 chars]j'))]

First differing element 0:
('3.14', 'Иван Иванов', '10', ('Плейстейша[34 chars]че'))
(3.14, 'Иван Иванов', 10, ('Плейстейшан', [57 chars]aj'))

First list contains 1 additional elements.
First extra element 1:
('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))

- [('3.14',
? - -

+ [(3.14,
'Иван Иванов',
- '10',
? - -

+ 10,
- ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- ('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))]
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj'))]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/tmp/test.py", line 123, in test_full
self.assertEqual(expected_full, parse_wishlist(full))
AssertionError: Lists differ: [(3.1[66 chars]атче')), (1.94, 'Georgi "Jorkata" Georgiev', 4[412 chars]м'))] != [(3.1[66 chars]атче', 'Vancheto ot tretiq etaj')), (6.9, 'Mr.[370 chars]м'))]

First differing element 0:
(3.14[36 chars] 'Количка с дистанционо', 'Братче'))
(3.14[36 chars] 'Количка с дистанционо', 'Братче', 'Vancheto ot tretiq etaj'))

First list contains 1 additional elements.
First extra element 4:
(99.9534412345, 'На мама сладкото ангелче', 3, ('Най-хубавото дървено конче (размер 1.5)', 'Най-страхотното лего (тамън отвориха лицензиран магазин)', 'Хлороформ'))

- [(3.14, 'Иван Иванов', 10, ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- (1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',)),
+ [(3.14,
+ 'Иван Иванов',
+ 10,
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj')),
(6.9,
'Mr. D-r',
999,
('[Doctor stuff] Скалпел',
'[Doctor stuff] Мехлем за дупе',
'[Non-doctor stuff] Мехлем за дупе')),
- (1,
+ (1.0,
? ++

'Gospodin (he/him) Mitko',
12,
('1', '2', '3', '4', 'Malko mi pisva da go pisha toq test')),
(99.9534412345,
'На мама сладкото ангелче',
3,
('Най-хубавото дървено конче (размер 1.5)',
'Най-страхотното лего (тамън отвориха лицензиран магазин)',
'Хлороформ'))]

======================================================================
FAIL: test_half (test.TestRegex)
A test without the more edgy cases.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 111, in test_half
self.assertEqual(converted, parse_wishlist(modified_example))
AssertionError: Lists differ: [('3.14', 'Иван Иванов', '10', ('Плейстейша[110 chars]',))] != [(3.14, 'Иван Иванов', 10, ('Плейстейшан', [58 chars]j'))]

First differing element 0:
('3.14', 'Иван Иванов', '10', ('Плейстейша[34 chars]че'))
(3.14, 'Иван Иванов', 10, ('Плейстейшан', [57 chars]aj'))

First list contains 1 additional elements.
First extra element 1:
('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))

- [('3.14',
? - -

+ [(3.14,
'Иван Иванов',
- '10',
? - -

+ 10,
- ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- ('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))]
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj'))]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/tmp/test.py", line 113, in test_half
self.assertEqual(expected_half, parse_wishlist(half))
AssertionError: Lists differ: [(3.1[66 chars]атче')), (1.94, 'Georgi "Jorkata" Georgiev', 4[194 chars]м'))] != [(3.1[66 chars]атче', 'Vancheto ot tretiq etaj')), (99.953441[150 chars]м'))]

First differing element 0:
(3.14[36 chars] 'Количка с дистанционо', 'Братче'))
(3.14[36 chars] 'Количка с дистанционо', 'Братче', 'Vancheto ot tretiq etaj'))

First list contains 1 additional elements.
First extra element 2:
(99.9534412345, 'На мама сладкото ангелче', 3, ('Най-хубавото дървено конче (размер 1.5)', 'Най-страхотното лего (тамън отвориха лицензиран магазин)', 'Хлороформ'))

- [(3.14, 'Иван Иванов', 10, ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- (1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',)),
+ [(3.14,
+ 'Иван Иванов',
+ 10,
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj')),
(99.9534412345,
'На мама сладкото ангелче',
3,
('Най-хубавото дървено конче (размер 1.5)',
'Най-страхотното лего (тамън отвориха лицензиран магазин)',
'Хлороформ'))]

======================================================================
FAIL: test_modified_example (test.TestRegex)
A test similar to the example (just a lil' bit different).
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 101, in test_modified_example
self.assertEqual(converted, parse_wishlist(modified_example))
AssertionError: Lists differ: [('3.14', 'Иван Иванов', '10', ('Плейстейша[110 chars]',))] != [(3.14, 'Иван Иванов', 10, ('Плейстейшан', [58 chars]j'))]

First differing element 0:
('3.14', 'Иван Иванов', '10', ('Плейстейша[34 chars]че'))
(3.14, 'Иван Иванов', 10, ('Плейстейшан', [57 chars]aj'))

First list contains 1 additional elements.
First extra element 1:
('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))

- [('3.14',
? - -

+ [(3.14,
'Иван Иванов',
- '10',
? - -

+ 10,
- ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- ('1.94', 'Georgi "Jorkata" Georgiev', '43', ('Vancheto ot tretiq etaj',))]
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj'))]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/tmp/test.py", line 103, in test_modified_example
self.assertEqual(expected_example, parse_wishlist(modified_example))
AssertionError: Lists differ: [(3.1[66 chars]атче')), (1.94, 'Georgi "Jorkata" Georgiev', 4[28 chars]',))] != [(3.1[66 chars]атче', 'Vancheto ot tretiq etaj'))]

First differing element 0:
(3.14[36 chars] 'Количка с дистанционо', 'Братче'))
(3.14[36 chars] 'Количка с дистанционо', 'Братче', 'Vancheto ot tretiq etaj'))

First list contains 1 additional elements.
First extra element 1:
(1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',))

- [(3.14, 'Иван Иванов', 10, ('Плейстейшан', 'Количка с дистанционо', 'Братче')),
- (1.94, 'Georgi "Jorkata" Georgiev', 43, ('Vancheto ot tretiq etaj',))]
+ [(3.14,
+ 'Иван Иванов',
+ 10,
+ ('Плейстейшан',
+ 'Количка с дистанционо',
+ 'Братче',
+ 'Vancheto ot tretiq etaj'))]

----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=3)

Дискусия
Костадин Русалов
27.12.2023 21:53

Надявах се няма такива тестове, защото забелязах проблема твърде късно :/
Виктор Бечев
27.12.2023 12:18

Има нещо дребно, което ти чупи решението и то защото съм променил малко примера. :D Все пак е добро.
История
Това решение има само една версия.