1
votes

Utilisation des fonctions min () et max () avec plusieurs chaînes

Je travaille sur un petit problème de CodingBat: étant donné 2 chaînes, a et b, retourne une chaîne de la forme court + long + court, avec la chaîne la plus courte à l'extérieur et la chaîne la plus longue à l'intérieur.

Voici ce que j'ai:

def combo_string(a, b):
    short = min(a, b)
    long = max(a, b)
    return short + long + short

L'idée: min (a, b) renverrait la plus courte des deux chaînes et max (a, b) renverrait le plus long des deux. Cependant, ce code fonctionne de manière incohérente.

combo_string ('a', 'bb') renvoie 'abba' (correct), mais combo_string ('Hello', 'hi') renvoie 'HellohiHello' (incorrect et en fait à l'opposé de ce que je veux).

Est-ce que j'utilise le min () et max () ne fonctionnent pas correctement?


0 commentaires

3 Réponses :


1
votes

bonjour par ordre alphabétique précède salut donc c'est le "minimum". Ce que vous voulez faire, c'est utiliser l'argument key pour spécifier que vous voulez la longueur minimale et non la valeur minimale.

min(a, b, key=len)


0 commentaires

2
votes

Vous devez spécifier la fonction clé (qui sera len ). Sinon, Python triera lexicographiquement (par ordre alphabétique, fondamentalement), ce qui n'est certainement pas ce que vous voulez:

min('a', 'bb', key=len)
# 'a'
min('Hello', 'hi', key=len)
# 'hi'

Par exemple:

def combo_string(a, b):
    short = min(a, b, key=len)
    long = max(a, b, key=len)
    return short + long + short

Fondamentalement, au lieu d'utiliser simplement les opérateurs > et pour la comparaison (c'est-à-dire a> b ou autre), le min et max utiliseront le résultat de la fonction key (c'est-à-dire len (a)> len (b) ou autre).


0 commentaires

0
votes

Est-ce que j'utilise les fonctions min () et max () de manière incorrecte?

Ouais. Fondamentalement, votre problème est que max (a, b) ne fait pas exactement ce que vous pensez que c'est. max (a, b) compare les objets chaîne a et b eux-mêmes. Python implémente des comparaisons entre les chaînes non par la longueur des chaînes , mais par leurs valeurs lexicographiques < / a>.

Cela signifie que parfois max (a, b) peut fonctionner, mais pas toujours. Vous devez dire à Python de comparer directement les longueurs des chaînes en utilisant len .


0 commentaires