print(
"1. Engine block \n"
"2. Pistons \n"
"3. Crankshaft \n"
"4. Camshaft \n"
"5. Cylinder head \n"
"6. Connecting Rod \n"
)
part = int(input("Choose an engine part to show you details about it: "))
if part == 1:
print("Engine block")
elif part == 2:
print("Pistons")
elif part == 3:
print("Crankshaft")
I have 26 statements like these and I wonder if I can make it simpler with classes,
functions, lists or something I can't find a way??
4 Réponses :
Vous pouvez créer une classe avec Question et réponse. Ajoutez également une fonction dans la classe pour vérifier si l'entrée est la même que la réponse et renvoyez le résultat en conséquence. Vous pouvez utiliser l'expression régulière pour récupérer la valeur de la bonne réponse dans le texte de la question.
C'est quelque chose à penser, j'essaierai de jouer avec mon code avec des classes et des fonctions-
Je suggérerais d'utiliser quelque chose comme ceci:
def info_about(parts):
info = list(parts.values())
print("\n".join(f"{i+1}.\t\t{name}" for i, name in enumerate(parts)))
print()
while True:
part = input("Choose an engine part to show you details about it: ")
if not part.isnumeric():
print("Please enter a valid number")
continue
part = int(part)
if part > len(info) or part < 1:
print("Please enter a valid number")
continue
break
print(info[part-1])
parts = {
"Engine block": "Info about engine block",
"Pistons": "Info about pistons",
"Crankshaft": "Info about crankshaft",
"Camshaft": "Info about camshaft",
"Cylinder head": "Info about cylinder head",
"Connecting Rod": "Info about connecting rod",
}
info_about(parts)
Ceci vérifie maintenant l'entrée pour s'assurer qu'elle est valide - qu'elle est numérique et qu'elle est comprise entre 1 et le nombre de parties.
/ p>
Ce n'était pas moi le vote défavorable, mais que se passe-t-il si j'entre "test" ... Vous obtenez juste une erreur.
Ok, j'ai corrigé. Merci :)
C'est génial, je ne peux penser à aucune amélioration, parfaitement écrit, beaucoup d'aide, je voulais demander comment puis-je vérifier les entrées mais vous lisez dans mes pensées: D
Créez un dict avec toutes les clés comme celle-ci et utilisez-le chaque fois que vous en avez besoin avec l'index, il sera facile à maintenir
labels = {
1: {'name': 'Engine block', 'detail': 'Engine block detail'},
2: {'name': 'Pistons', 'detail': 'Pistons detail'},
3: {'name': 'PisCrankshafttons', 'detail': 'Crankshaft detail'},
}
for (k, val) in labels.items():
print("%s: %s" % (k, val['name']))
part = int(input("Choose an engine part to show you details about it: "))
print(labels[part]['detail'])
Si vous voulez vraiment une fonction supplémentaire
print(
"1. Engine block\n"
"2. Pistons\n"
"3. Crankshaft\n"
"4. Camshaft\n"
"5. Cylinder head\n"
"6. Connecting Rod\n"
)
def list_dict():
return {1: "Engine block", 2: "Pistons", 3: "Crankshaft"}
def ans(part):
return list_dict()[part]
part = int(input("Choose an engine part to show you details about it: "))
print(ans(part))
Une fonction supplémentaire est toujours une bonne idée, je vais jouer avec mon code et essayer de le faire entrer, excellent travail
Vous pouvez voir ce qui est commun entre ces 26 instructions et le mettre sur une fonction
J'y ai pensé, mais je veux sortir chaque pièce pour elle-même, comme les pistons, le vilebrequin et l'arbre à cames sont en commun avec le bloc moteur, cela ne déchirerait-il pas des parties de leur description, cela ne montrerait-il pas une description pour 4 pièces?
vous pouvez faire une fonction où vous passez un dict et imprimer les informations comme la réponse ci-dessous