J'essaie de définir une fonction qui supprime les espaces et les traits d'union d'une chaîne, par exemple elle modifierait foo - bar en foobar.

La chaîne d'origine doit être stockée sous une variable nommée (par exemple orig_str) et la chaîne modifiée renvoyée sous un nouveau nom de variable (par exemple amended_str).

Ma tentative de définir une telle fonction ne fait rien du tout.

#This is what my function looks like

def normalise_str(old_string, new_string):          #def func
    temp_string = old_string.replace(" ", "")       #rm whitespace
    temp_string = temp_string.replace("-", "")      #rm hyphens
    new_string = temp_string                        #assign newly modified str to var

#This is what I would like to achieve

orig_str = "foo - bar"
normalise_str = (orig_str, amended_str)
print(amended_str) #I would like this to return "foobar"

J'apprécierais certainement une solution plus efficace du type ...

amended_str = orig_str.replace(" " and "-", "") #I'm sure something sensible like this exists

Cependant, j'ai besoin de comprendre ce que je fais mal avec ma fonction afin de faire progresser mon apprentissage.

0
Solebay Sharp 26 oct. 2020 à 23:49

3 réponses

Meilleure réponse

Votre version actuelle échoue car les chaînes ne peuvent pas être modifiées après la création (voir note); faites plutôt ce qui suit:

amended_str = normalize_str(orig_str)

La version abrégée de ce que vous voulez est:

def normalize_str(in_str):
    return in_str.replace(' ', '').replace('-', '')

# Or
normalize_str = lambda s: s.replace(' ', '').replace('-', '')

Remarque: Vous ne pouvez pas modifier la chaîne passée en argument car les chaînes sont immuables - ce qui signifie qu'une fois créées, elles ne peuvent pas être modifiées.

2
Collin Heist 26 oct. 2020 à 20:55

Vous devez entrer l'ancienne chaîne, apporter vos modifications, puis renvoyer la chaîne temporaire finale à la variable.

#This is what my function looks like

def normalise_str(old_string):          #def func
    temp_string = old_string.replace(" ", "")       #rm whitespace
    temp_string = temp_string.replace("-", "")      #rm hyphens
    return temp_string                     #assign newly modified str to var

#This is what I would like to achieve

orig_str = "foo - bar"
s = normalise_str(orig_str)
print(s) #I would like this to return "foobar"
1
Chris 26 oct. 2020 à 20:51

Les chaînes sont des objets non mutables, ce qui signifie en Python que la chaîne d'origine en dehors de la fonction ne peut pas être modifiée. Par conséquent, vous devez renvoyer explicitement la chaîne modifiée.

def normalise_str(old_string):          
    return old_str.replace(' ','').replace('-', '')

orig_str = "foo - bar"
amended_str = normalise_str(old_string)
print(amended_str) # Should print foobar
1
shiningPanther 28 oct. 2020 à 17:14