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
@thann
mod
admin
link
fedilink
424d

It’s hard to understand what you’re trying to do here…
I would recommend stripping the problem down to a couple lines and explaining what you want and why your code doesn’t work.

If you’re trying to extract information from a string regular expressions are the way to go. You should probably add more to the regexp to capture the name and the percentage, like so:

re.match(r'(.*) \(([0-9]*)%\)', s).groups()

@OptimusPrime@lemmy.ml
creator
link
fedilink
124d

I want to get the names and the percentages from the string. I’ve managed to get the percentage by substituting match for search. But I’m still getting an error while getting the name.

@thann
mod
admin
link
fedilink
324d

I see.

res += "4 " + name The problem here is you’re doing <List> += <str>

Changing it to: res.append('4 ' + name) fixes it

Ask specific questions about how to code something in python

Python docs (tutorial)
Intro to programming - University of Helsinki

General python discussion on lemmy.ml

Create Post From:
lemmy.ml

  • 0 users online
  • 2 users / day
  • 2 users / week
  • 2 users / month
  • 3 users / 6 months
  • 26 subscribers
  • 2 Posts
  • 3 Comments
  • Modlog