Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/09/2020, à 10:48

chris7522

Alternative switch en python ?

Bonjour a toutes et a tous ,

Python dispose t il d'une alternative a switch /case que l'on peut trouver en C ou C++ ?
D'avance Merci .

Hors ligne

#2 Le 26/09/2020, à 11:04

Compte supprimé

Re : Alternative switch en python ?

Bonjour,
En recherchant sur le net 'python  switch /case', tu tomberas sur de nombreux exemples de code python reposant notamment sur l'utilisation d'un dico...

#3 Le 26/09/2020, à 11:54

kholo

Re : Alternative switch en python ?

salut...
+1 @pseudofab
et une compréhension sur une liste avec une condition par un if !!!

un petit exemple :

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

rech = "truc"
une_liste = [ "un truc", "une chose", "un autre truc", "rien", "non plus", "ou pas", "vide", "" ]

#  reponse = [ x for x in une_liste if rech in x ]
#  print( "mes réponses", reponse )

def faire_un_truc(le_x):
    print("je fais un truc avec", le_x )
    return le_x

reponse = [ faire_un_truc(x) for x in une_liste if rech in x ]
print( "j'ai trouvé", len(reponse), "truc(s)" )
print( "mes réponses", reponse )

edit 15:03 : une petite modification esthétique !

Dernière modification par kholo (Le 26/09/2020, à 14:04)

Hors ligne

#4 Le 26/09/2020, à 14:39

chris7522

Re : Alternative switch en python ?

Merci a tous les deux !
L'utilisation du dico est adapté a mon probleme , de plus tres simple d'utilisation .
Merci Kholo mais je suis au tout debut de mon apprentissage et je n'ai pas compris la boucle for contenue dans ta variable reponse .
Ca viendra avec le temps smile

Hors ligne

#5 Le 26/09/2020, à 16:34

kholo

Re : Alternative switch en python ?

les compréhensions sont des applications  que l'on peut faire à des listes (par exemple)
ce code est mis en commentaire pour ne pas être exécuté...

#  reponse = [ x for x in une_liste if rech in x ]

voyons ce qu'il signifie :

reponse = [ x for x in une_liste if rech in x ]
x in une_liste

on prend un par un chaque élément d'une liste

if rech in x

si la variable rech est dans x
on ajoute x à une liste qui sera la sortie...

la même chose détaillé en code :

reponse=[]
for x in une_liste:
    if rech in x:
        reponse.append(x)
print(reponse)

quant au dictionnaire attention; il fera la même chose mais les éléments n'ont pas d'ordre défini lors de l'accès alors qu'une liste oui...

Bonne continuation dans ton apprentissage !! big_smile

Hors ligne

#6 Le 26/09/2020, à 18:34

Compte supprimé

Re : Alternative switch en python ?

kholo a écrit :

l

quant au dictionnaire attention; il fera la même chose mais les éléments n'ont pas d'ordre défini lors de l'accès alors qu'une liste oui...

Salut kholo.
Depuis python 3.7, l'ordre de création des éléments d'un dictionnaire est conservé ... cool

#7 Le 28/09/2020, à 11:34

chris7522

Re : Alternative switch en python ?

Merci kholo .
J'ai bien compris la compréhension sur une liste avec une condition par un if .
Mais dans :

#  reponse = [ x for x in une_liste if rech in x ]

Que signifie le 1 er  "x" ?

J'ai essayé de faire un truc ,mais tout ca n'a pas l'air tres correcte :

def menu_japon():
	print("Faites votre choix parmis ces menus :")
	print("1 - Menu Sushi ")
	print("2 - Menu Sashimi ")
	print("3 - Menu yakitori ")
	return int(input())
def menu_oriental():
	print("Faites votre choix parmis ces menus :")
	print("4 - Menu Couscous ")
	print("5 - Menu Tajine ")
	print("6 - Menu Boulettes ")
	return int(input())
dico = { 1:"Menu Sushi",2:"Menu Sashimi",3:"Menu Yakitori",4:"Menu Couscous",5:"Menu Tajine",6:"Menu Boulettes"}
while True:
	print("Que souhaitez vous manger ?")
	print("1 - Cuisine Japonaise ")
	print("2 - Cuisine Orientale ")
	if result == int(input()):
		break
	else:
		print("Mauvais choix ! Recommencez ...")

if result == 1:
	choix=menu_japon()
        if choix == 1 :
    	    print("Vous avez choisis " dico[1]
        elif choix == 2 :
    	    print("Vous avez choisis " dico[2]
        elif choix == 3 :
    	    print("Vous avez choisis " dico[3]
else:
        choix=menu_oriental()
        if choix == 4:
    	    print("Vous avez choisis " dico[4]
        elif choix == 5:
    	    print("Vous avez choisis " dico[5]
        elif choix == 6:
    	    print("Vous avez choisis " dico[6]
    		

Hors ligne

#8 Le 28/09/2020, à 13:01

kholo

Re : Alternative switch en python ?

bon...

reponse = [ x for x in une_liste if rech in x ]

reponse sera la liste de tous les x définis par x, éléments d'une liste si le terme rech est dans le x testé...

je partirais d'1 dictionnaire composé de 2 dictionnaires.

menu_restau = { "menu_japon":{1:"Menu Sushi",2:"Menu Sashimi",3:"Menu Yakitori"}, "menu_oriental":{4:"Menu Couscous",5:"Menu Tajine",6:"Menu Boulettes"}}
sortie = menu_restau
print(sortie)
sortie = menu_restau["menu_japon"]
print(sortie)
sortie = menu_restau["menu_japon"][1]
print(sortie)
{'menu_japon': {1: 'Menu Sushi', 2: 'Menu Sashimi', 3: 'Menu Yakitori'}, 'menu_oriental': {4: 'Menu Couscous', 5: 'Menu Tajine', 6: 'Menu Boulettes'}}
{1: 'Menu Sushi', 2: 'Menu Sashimi', 3: 'Menu Yakitori'}
Menu Sushi

et, bien sûr :

sortie = menu_restau["menu_oriental"][5]
print(sortie)
Menu Tajine

de là tes requêtes deviennent plus simple à mettre en œuvre...
là ton paradigme est sur une programmation fonctionnelle mais,
pour aller plus loin, une fois maîtrisé ton dictionnaire,
tu pourras facilement créer un objet "Menus" avec des méthodes pour "ajouter / modifier / supprimer" des menus et leur référence

voilà un début de code pour commencer :

print(30*'-')
print("choisissez un menu")
for cle, valeur in menu_restau.items():
    print(cle)
    for ref, nom_menu in valeur.items():
        print("    ", ref, "=>", nom_menu)

result = int(input())

print("vous avez choisi", result)

je te laisse voir la suite...

@pseudofab : intéressant, je vais testé ça... j'ai beaucoup appris avec 3.5 je dois voir pas mal de choses dont les fstrings...

Hors ligne

#9 Le 28/09/2020, à 19:52

chris7522

Re : Alternative switch en python ?

for cle, valeur in menu_restau.items():
    print(cle)
    for ref, nom_menu in valeur.items():
        print("    ", ref, "=>", nom_menu)

Pour " menu_restau.items()" ou " valeur.items() " , items() est une méthode ?
A la place de " ref " et " nom_menu " , j'aurai pu ecrire n'importe quelle autre chose ?

Hors ligne

#10 Le 28/09/2020, à 20:50

chris7522

Re : Alternative switch en python ?

menu_restau = { "menu_japon":{1:"Menu Sushi",2:"Menu Sashimi",3:"Menu Yakitori"}, "menu_oriental":{4:"Menu Couscous",5:"Menu Tajine",6:"Menu Boulettes"}}
print(30*'-')
print("choisissez un menu")
for cle, valeur in menu_restau.items():
    print(cle)
    for ref, nom_menu in valeur.items():
        print("    ", ref, "=>", nom_menu)

while True:
	try:    
		result = int(input())
		assert result > 0 and result < 7
	except AssertionError:
		print("Le nombre doit etre compris entre 1 et 6 !")
	except ValueError:
		print("Vous devez entrer un nombre !")
	else:
		break
		
prix={1:"Menu Sushi: 10 Euros",2:"Menu Sashimi: 15 Euros",3:"Menu Yakitori : 9 euros",4:"Menu Couscous: 16 Euros",5:"Menu Tajine: 15 euros",6:"Menu Boulettes"}		
print("Vous avez choisis :")
if result == 1:
    print(prix[1])
elif result == 2:
    print(prix[2])
elif result == 3:
    print(prix[3])
elif result == 4:
    print(prix[4])
elif result == 5:
    print(prix[5])
else : 
    print(prix[6])

La fin est un peu répétitive , puis je faire autrement ?

Dernière modification par chris7522 (Le 28/09/2020, à 21:00)

Hors ligne

#11 Le 29/09/2020, à 05:57

pingouinux

Re : Alternative switch en python ?

Bonjour,
Puisque tu as testé que result est bien un entier compris entre 1 et 6 inclus, tu peux remplacer

if result == 1:
    print(prix[1])
elif result == 2:
    print(prix[2])
elif result == 3:
    print(prix[3])
elif result == 4:
    print(prix[4])
elif result == 5:
    print(prix[5])
else : 
    print(prix[6])

par

print(prix[result])

Hors ligne

#12 Le 29/09/2020, à 06:04

chris7522

Re : Alternative switch en python ?

Magnifique . Merci pingouinux !

Hors ligne

#13 Le 29/09/2020, à 13:13

kholo

Re : Alternative switch en python ?

dommage d'avoir deux dicos différents alors qu'un seul pourrait réunir toutes les informations...

et oui

for ref, nom_menu in valeur.items():

permet de lire un dico par entrée en récupérant grâce à la méthode .items() un couple clé / valeur de chaque entrée
donc ref, nom_menu comme cle, valeur dans la ligne précédente sont des noms arbitraires de variable

Hors ligne

#14 Le 29/09/2020, à 13:57

kholo

Re : Alternative switch en python ?

tout dans un seul dictionnaire...

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

menu_restau = { 
"menu_japon":
    {
    1:["Menu Sushi", 10.00], 
    2:["Menu Sashimi", 15.00], 
    3:["Menu Yakitori", 9.00]
    }, 
"menu_oriental":
    {
    4:["Menu Couscous", 16.00], 
    5:["Menu Tajine", 15.00], 
    6:["Menu Boulettes", 0.00]
    }
}

print(30*'-')
print("choisissez un menu")
for cle, valeur in menu_restau.items():
    print(cle)
    for ref, le_menu in valeur.items():
        print("    ", ref, "=>", le_menu[0], "à", le_menu[1], "Euros" )

while True:
    try:    
        result = int(input())
        assert result > 0 and result < 7
    except AssertionError:
        print("Le nombre doit etre compris entre 1 et 6 !")
    except ValueError:
        print("Vous devez entrer un nombre !")
    else:
        break

print("Vous avez choisis :")
trouve = 0
for cle, valeur in menu_restau.items():
    for ref, le_menu in valeur.items():
        if ref == result :
            choix = [ ref, le_menu[0], le_menu[1] ]
            trouve = 1
        if trouve == 1: break
    if trouve == 1: break

print("le menu numéro", choix[0], "nommé",  choix[1], "à", choix[2], "Euros" )

pas très pythonesque dans la mesure où le dictionnaire n'est pas utilisé à sa juste mesure
par exemple le test pour retrouver le menu n'est pas terrible
mais ça doit fonctionner et être très facilement compréhensible...
... et tu peux remplacer les numéros des menus par des références (plus communes dans ce genre d'emploi)
... ou ajouter facilement d'autres types de menus, des desserts, des boissons... lol

Hors ligne

#15 Le 29/09/2020, à 14:27

chris7522

Re : Alternative switch en python ?

Merci d'avoir pris la peine de tous réecrire !
J'ai compris ton exemple avec un seul dico , a l'exception du test pour retrouver le menu , c'est un peu ardu pour moi .

Hors ligne

#16 Le 29/09/2020, à 15:36

Compte supprimé

Re : Alternative switch en python ?

kholo a écrit :

tout dans un seul dictionnaire...

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

menu_restau = { 
"menu_japon":
    {
    1:["Menu Sushi", 10.00], 
    2:["Menu Sashimi", 15.00], 
    3:["Menu Yakitori", 9.00]
    }, 
"menu_oriental":
    {
    4:["Menu Couscous", 16.00], 
    5:["Menu Tajine", 15.00], 
    6:["Menu Boulettes", 0.00]
    }
}

print(30*'-')
print("choisissez un menu")
for cle, valeur in menu_restau.items():
    print(cle)
    for ref, le_menu in valeur.items():
        print("    ", ref, "=>", le_menu[0], "à", le_menu[1], "Euros" )

while True:
    try:    
        result = int(input())
        assert result > 0 and result < 7
    except AssertionError:
        print("Le nombre doit etre compris entre 1 et 6 !")
    except ValueError:
        print("Vous devez entrer un nombre !")
    else:
        break

print("Vous avez choisis :")
trouve = 0
[code]for cle, valeur in menu_restau.items():
    for ref, le_menu in valeur.items():
        if ref == result :
            choix = [ ref, le_menu[0], le_menu[1] ][/code]
            trouve = 1
        if trouve == 1: break
    if trouve == 1: break

print("le menu numéro", choix[0], "nommé",  choix[1], "à", choix[2], "Euros" )

La variable trouve et le test que tu fais, ne sont pas necessaires:

for cle, valeur in menu_restau.items():
    for ref, le_menu in valeur.items():
        if ref == result :
            choix = [ ref, le_menu[0], le_menu[1] ]
            break

En fait, je simplifirai l'ensemble du code ainsi:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

menu_restau = { 1:["Menu Sushi", 10.00], 
    2:["Menu Sashimi", 15.00], 
    3:["Menu Yakitori", 9.00],
    4:["Menu Couscous", 16.00], 
    5:["Menu Tajine", 15.00], 
    6:["Menu Boulettes", 0.00]
    }

print(30*'-')
print("choisissez un menu")
for cle, valeur in menu_restau.items():
    ref = "menu_japon" if cle<4 else "Menu_oriental"
    print("{:<13}  {}=> {} à {} Euros".format(ref,cle,valeur[0],valeur[1]))
while True:
    try:    
        choix = int(input("Entrez votre choix :"))
        assert 0 < choix < 7
    except AssertionError:
        print("Le nombre doit etre compris entre 1 et 6 !")
    except ValueError:
        print("Vous devez entrer un nombre !")
    else:
        break
ref= "menu_japon" if choix<4 else "Menu_oriental"
print(f"Vous avez choisis dans le {ref} le plat nommé {menu_restau[choix] [0]} à {menu_restau[choix][1]} euros")

Dernière modification par Compte supprimé (Le 29/09/2020, à 15:40)

#17 Le 29/09/2020, à 16:57

kholo

Re : Alternative switch en python ?

@pseudofab
oui, en effet...
mais j'ai présumé que l'évolution d'un tel programme utiliserait des références en lieu et place de numéros et ne permettrait plus les tests de supériorité ou d'infériorité... et on n'a que deux groupes de menu mais cela deviendrait vite complexe en ajoutant des plats, des boissons, des desserts, d'autres pays, des plats régionaux...
en fait... le dictionnaire devrait être composé de chaque menu voire élément du menu composé des propriétés de chacun
... et certainement dans une liste :

[D12, poulet aux crevettes, menu japon, 12.00, poulets avec des crevettes cuits à la plancha, plein d'autres infos]

... oui je sais c'est plutôt chinois !! lol
ensuite les accès et la gestion peuvent se faire comme dans une base de donnée commune...

@chris7522
tu as de quoi potasser...

print("Vous avez choisis :")
trouve = 0
for cle, valeur in menu_restau.items():
    for ref, le_menu in valeur.items():
        if ref == result :
            choix = [ ref, le_menu[0], le_menu[1] ]
            trouve = 1
        if trouve == 1: break
    if trouve == 1: break

print("le menu numéro", choix[0], "nommé",  choix[1], "à", choix[2], "Euros" )

en fait, je me promène dans la base à la recherche de la référence et casse la recherche une fois la référence trouvée...
comme je le dis à pseudfab, un dictionnaire simple avec un élément par entrée composé de tous les détails permettrais de simplifier cette recherche... et certainement toute la gestion...

je vais regarder si j'ai pas des exemples qui traînent dans ma bibliothèque et je repasserai...
et je soumettrai d'autres évolutions du dictionnaire pour en simplifier les accès...
tu peux aussi continuer tes recherches et nous soumettre tes avancées !!

voilà qui te donne des exemples de gestion de dictionnaire (qui sont très puissants...)
et en mettant tout dans un seul groupe, tu pourras utiliser plus facilement des compréhensions sur le dictionnaire...
(le but est d'apprendre...)

edit :
petite démo vite fait :

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

menu_restau = { 
    1:["Menu Sushi", "menu japon", 10.00], 
    2:["Menu Sashimi", "menu japon", 15.00], 
    3:["Menu Yakitori", "menu japon", 9.00],
    4:["Menu Couscous", "menu oriental", 16.00], 
    5:["Menu Tajine", "menu oriental", 15.00], 
    6:["Menu Boulettes", "menu oriental", 0.00]
}

print(30*'-')
print("choisissez un menu")
japon = [ x for x in menu_restau if menu_restau[x][1] == "menu japon" ]
oriental = [ x for x in menu_restau if menu_restau[x][1] == "menu oriental" ]

# print(japon)
# print(oriental)

print("menus japon")
for cle in japon:
    print(menu_restau[cle])

print("menus orientaux")
for cle in oriental:
    nom_menu = menu_restau[cle][0]
    prix = menu_restau[cle][2]
    
    print("    ", nom_menu, "à", prix, "Euros" )

juste pour montrer comment ça pourrait être

Dernière modification par kholo (Le 29/09/2020, à 17:09)

Hors ligne

#18 Le 29/09/2020, à 17:44

Compte supprimé

Re : Alternative switch en python ?

miam miam, ça me donne faim wink

@chris7522:
Tu en es où avec le mooc?

#19 Le 29/09/2020, à 18:04

kholo

Re : Alternative switch en python ?

par exemple :

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

menu_restau = { 
    1:["Menu Sushi", "menu japon", 10.00, "une description ici..."], 
    2:["Menu Sashimi", "menu japon", 15.00, "une description ici..."], 
    3:["Menu Yakitori", "menu japon", 9.00, "une description ici..."],
    4:["Menu Couscous", "menu oriental", 16.00, "une description ici..."], 
    5:["Menu Tajine", "menu oriental", 15.00, "une description ici..."], 
    6:["Menu Boulettes", "menu oriental", 0.00, "une description ici..."],
    101:["eau minérale", "boissons", 1.20, "une description ici..."],
    102:["vin blanc", "boissons", 1.50, "une description ici..."],
    103:["vin rouge", "boissons", 1.60, "une description ici..."],
}

print(30*'-')
print("choisissez un menu")
toutes_les_cles = [ x for x in menu_restau ]
# toutes_les_cles.append("q")
japon = [ x for x in menu_restau if menu_restau[x][1] == "menu japon" ]
oriental = [ x for x in menu_restau if menu_restau[x][1] == "menu oriental" ]
boissons = [ x for x in menu_restau if menu_restau[x][1] == "boissons" ]


# print(toutes_les_cles)
# print(japon)
# print(oriental)

print("menus japon")
for cle in japon:
    nom_menu = menu_restau[cle][0]
    prix = menu_restau[cle][2]
    print("    ", cle, "=>", nom_menu, "à", prix, "Euros" )

print("menus orientaux")
for cle in oriental:
    nom_menu = menu_restau[cle][0]
    prix = menu_restau[cle][2]
    print("    ", cle, "=>", nom_menu, "à", prix, "Euros" )

print("boissons")
for cle in boissons:
    nom_menu = menu_restau[cle][0]
    prix = menu_restau[cle][2]
    print("    ", cle, "=>", nom_menu, "à", prix, "Euros" )

print("q pour quitter")

while True:
    result = input()
    if result == "q":
        print("on quitte")
        break

    if int(result) not in toutes_les_cles:
        print("Erreur !!")
        print(result, "n'est pas un choix possible" )
    else :
        print("Vous avez choisis :")
        choix = menu_restau[int(result)]
        # print(choix)
        print("le menu numéro", result, "nommé",  choix[0], "à", choix[2], "Euros" )
        break

... et on se rend compte qu'on peut factoriser l'affichage du menu avec une fonction...

et pour aller un peu plus loin...
je crée des tables dont la table 0 (qui serait la prochaine étape du dévellopement)
puis je fais ma factorisation et une accumulation des menus pour en faire une liste...
la suite serait le calcul de la note en fin de repas, gestion des tables, des stocks... lol

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

tables = {}
tables[0] = []
# TODO : gestion des tables

menu_restau = { 
    1:["Menu Sushi", "menu japon", 10.00, "une description ici..."], 
    2:["Menu Sashimi", "menu japon", 15.00, "une description ici..."], 
    3:["Menu Yakitori", "menu japon", 9.00, "une description ici..."],
    4:["Menu Couscous", "menu oriental", 16.00, "une description ici..."], 
    5:["Menu Tajine", "menu oriental", 15.00, "une description ici..."], 
    6:["Menu Boulettes", "menu oriental", 0.00, "une description ici..."],
    101:["eau minérale", "boissons", 1.20, "une description ici..."],
    102:["vin blanc", "boissons", 1.50, "une description ici..."],
    103:["vin rouge", "boissons", 1.60, "une description ici..."],
    # 104:["vin rouge", "boissons", 1.60, "une description ici..."],
    105:["café", "boissons", 0.60, "une description ici..."],
    
}

print(30*'-')
print("choisissez un menu")
toutes_les_cles = [ x for x in menu_restau ]

japon = [ x for x in menu_restau if menu_restau[x][1] == "menu japon" ]
oriental = [ x for x in menu_restau if menu_restau[x][1] == "menu oriental" ]
boissons = [ x for x in menu_restau if menu_restau[x][1] == "boissons" ]

# print(toutes_les_cles)
# print(japon)
# print(oriental)

def afficher_elements(le_nom):
    for cle in le_nom:
        nom_menu = menu_restau[cle][0]
        le_prix = menu_restau[cle][2]
        la_description = menu_restau[cle][3]
        print("    ", cle, "=>", nom_menu, "à", le_prix, "Euros" )
        # print("         ", la_description)

print("menus japon")
afficher_elements(japon)

print("menus orientaux")
afficher_elements(oriental)

print("boissons")
afficher_elements(boissons)

print("q pour quitter")
print(30*'-')

while True:
    result = input()
    if result == "q":
        print("on quitte")
        break

    if int(result) not in toutes_les_cles:
        print("Erreur !!")
        print(result, "n'est pas un choix possible" )
    else :
        print("Vous avez choisis :")
        choix = menu_restau[int(result)]
        print("le menu numéro", result, "nommé",  choix[0], "à", choix[2], "Euros" )
        tables[0].append(choix)

# print(tables)
# print(tables[0])
for une_ligne in tables[0]:
    print(une_ligne)

j'arrête là sinon je vais codé un programme pour les restaurants...
malheureusement avec le covid ça sert pas à grand chose en ce moment...
les pauvres !!

Hors ligne

#20 Le 29/09/2020, à 20:48

chris7522

Re : Alternative switch en python ?

Milles Merci a tous les deux , pour toutes ces infos precieuses .
On dirai que j’ai du pain sur la planche pour le reste de la semaine et c'est pas pour me déplaire.
Pour ce qui est du mooc , je n’ai pas eu beaucoup de temps jusqu'à présent donc cette fois ci , je m'y consacre sérieusement !

Hors ligne

#21 Le 01/10/2020, à 09:24

chris7522

Re : Alternative switch en python ?

Bonjour ,
Je souhaiterai dans une meme comprehension sur une liste avec condition :
  - Convertir mes string en entier .
  - Verifier si chaque nombre est pair .
  - Auquel cas , les multiplier par 10
J'ai essayé de faire ca  sans succès :

#!\usr\bin\env python3
#-*-coding:utf-8-*-

liste=["12","23","42","66","37","112","99"]

def mul_pair(liste):
	liste=[ i*10 for (int(i)) in liste if i%2 == 0]
	return liste

liste=mul_pair(liste)
print(liste)

Hors ligne

#22 Le 01/10/2020, à 10:03

beuguissime

Re : Alternative switch en python ?

Salut,

In [1]: liste = ["12","23","42","66","37","112","99"]

In [2]: [int(val) * 10 if int(val) %2 == 0 else int(val) for val in liste]          # Pour garder tous les entiers et multiplier les pairs par 10
Out[2]: [120, 23, 420, 660, 37, 1120, 99]

In [3]: [int(val) * 10 for val in liste if int(val) % 2 == 0]                           # Pour ne garder que les pairs multipliés par 10
Out[3]: [120, 420, 660, 1120]

Si le if est après le for, tu filtres la liste, donc moins d'éléments en sortie qu'en entrée.
Si le if est avant le for, tu modifies conditionnellement l'élément, donc il faut un else pour le cas où la condition n'est pas remplie. Et dans ce cas, tu auras autant d'éléments en sortie qu'en entrée.

Hors ligne

#23 Le 01/10/2020, à 13:06

chris7522

Re : Alternative switch en python ?

Merci beugissime pour cette explication limpide ! smile
Par contre , je ne comprends pas ce que signifie " val " . J'ai vu que ce n'etait pas un mot réservé .

Dernière modification par chris7522 (Le 01/10/2020, à 13:17)

Hors ligne

#24 Le 01/10/2020, à 15:31

pingouinux

Re : Alternative switch en python ?

chris7522 #23 a écrit :

Par contre , je ne comprends pas ce que signifie " val " . J'ai vu que ce n'etait pas un mot réservé .

val est une variable de ton choix. J'utilise i ci-dessous.
Solution voisine de celle de beuguissime en #22 :

print([i if i%2 else i*10 for i in map(int,liste)])

Hors ligne

#25 Le 01/10/2020, à 16:10

chris7522

Re : Alternative switch en python ?

  for i in map(int,liste)

Quésaco ?

Hors ligne