I want to do the following but I don’t know how to get the name and percentage:
mymodule_test.py
import unittest
from unittest import TestCase
from mymodule import get_wanted_cards, get_percentage
class GetCardsTestCase(TestCase):
def test_get_wanted_cards(self):
s = '''
↑ A Little Chat 92 (1%) 0 (0%) NEW
↑ An Offer You Can't Refuse 88 (87%) 0 (0%) NEW
↑ Angelic Observer 92 (91%) 0 (0%) NEW
'''
expected = ["4 An Offer You Can't Refuse", "4 Angelic Observer"]
actual = get_wanted_cards(s)
self.assertEqual(actual, expected)
def test_get_percentage(self):
s = "92 (1%)"
expected = 1
actual = get_percentage(s)
self.assertEqual(actual, expected)
if __name__ == '__main__':
unittest.main()
mymodule.py
import re
from typing import List
def get_wanted_cards(s: str) -> List[str]:
res = []
for line in s.splitlines():
array = line.split("\t")
if len(array) < 5:
continue
name = array[1]
percent = get_percentage(array[2])
if percent >= 50:
res += "4 " + name
return res
def get_percentage(s: str) -> int:
return int(re.match(r'\(([0-9]*)%\)', s).group(1))
if __name__ == "__main__":
pass
I see.
res += "4 " + name
The problem here is you’re doing<List> += <str>
Changing it to:
res.append('4 ' + name)
fixes it