8.8 C
New York

Remark résoudre : aidez le défi du libraire en Python


Un libraire possède des tons de livres classés en 26 catégories étiquetées A, B, … Z. Chaque livre a un code c de 3, 4, 5 caractères ou plus. Le 1er caractère d’un code est une lettre majuscule qui définit la catégorie du livre.

Dans la liste de inventory du libraire chaque code c est suivi d’un espace et d’un entier positif n (int n >= 0) qui indique la quantité de livres de ce code en inventory.

Par exemple, un extrait d’une liste de inventory pourrait être :

L = {"ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60"}.

ou
L = ("ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60") or ....
Vous recevrez une liste de inventory (ex : L) et une liste de catégories en majuscules ex :

M = {"A", "B", "C", "W"}

ou
M = ("A", "B", "C", "W") or ...
et votre tâche est de trouver tous les livres de L avec des codes appartenant à chaque catégorie de M et d’additionner leur quantité selon chaque catégorie.

Pour les listes L et M d’exemple il faut retourner la chaîne :

(A : 20) - (B : 114) - (C : 50) - (W : 0)

où A, B, C, W sont les catégories, 20 est la somme du livre distinctive de la catégorie A, 114 la somme correspondant à « BKWRK » et « BTSQZ », 50 correspondant à « CDXEF » et 0 à la catégorie ‘W’ puisqu’il n’y a pas de code commençant par W.

Si L ou M sont vides la chaîne de retour est «  ».

Remarques:

  • Dans les codes de résultat et leurs valeurs sont dans le même ordre que dans M.
  • Voir « Échantillons de assessments » pour le retour.

La resolution en Python

Choice 1

def stock_list(listOfArt, listOfCat):
    if (len(listOfArt) == 0) or (len(listOfCat) == 0):
        return ""
    end result = ""
    for cat in listOfCat:
        complete = 0
        for guide in listOfArt:
            if (guide(0) == cat(0)):
                complete += int(guide.cut up(" ")(1))
        if (len(end result) != 0):
            end result += " - "
        end result += "(" + str(cat) + " : " + str(complete) + ")"
    return end result

Choice 2

from collections import Counter

def stock_list(listOfArt, listOfCat):
    if not listOfArt:
        return ''
    codePos = listOfArt(0).index(' ') + 1
    cnt = Counter()
    for s in listOfArt:
        cnt(s(0)) += int(s(codePos:))
    return ' - '.be a part of('({} : {})'.format(cat, cnt(cat)) for cat in listOfCat)

Variante 3

def stock_list(stocklist, classes):
    if not stocklist or not classes:
        return ""
    return " - ".be a part of(
        "({} : {})".format(
            class,
            sum(int(merchandise.cut up()(1)) for merchandise in stocklist if merchandise(0) == class))
        for class in classes)

Cas de check pour valider la resolution

from resolution import stock_list
import check

@check.describe("Testing")
def _():
    @check.it("Checks")
    def _():
        b = ("BBAR 150", "CDXE 515", "BKWR 250", "BTSQ 890", "DRTY 600")
        c = ("A", "B", "C", "D")
        check.assert_equals(stock_list(b, c), "(A : 0) - (B : 1290) - (C : 515) - (D : 600)")

        b = ("ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600")
        c = ("A", "B")
        check.assert_equals(stock_list(b, c), "(A : 200) - (B : 1140)")

        b = ("CBART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60")
        c = ("A", "B", "C", "W")
        check.assert_equals(stock_list(b, c), "(A : 0) - (B : 114) - (C : 70) - (W : 0)")

        b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
        c = ("B", "R", "D", "X")
        check.assert_equals(stock_list(b, c), "(B : 364) - (R : 225) - (D : 60) - (X : 0)")

        b = ()
        c = ("B", "R", "D", "X")
        check.assert_equals(stock_list(b, c), "")

        b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
        c = ()
        check.assert_equals(stock_list(b, c), "")

        b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
        c = ("U", "V", "R")
        check.assert_equals(stock_list(b, c), "(U : 0) - (V : 0) - (R : 225)")

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles