Seite 1 von 1
if-Anweisung mit Neustart
Verfasst: Samstag 23. Januar 2021, 12:09
von FiftyShadesOfPython
Hallo zusammen,
ich will im folgenden Programm falls der else Fall eintrifft das die if Anweisung von vorne beginnt oder das komplette Programm von vorne anfängt...
if option == 2:
pick=int(input("1=Add name,2=delete Name\n---->"))
if pick == 1:
add_name=input("Please enter the name you want to add: ")
class_list.append(add_name)
if pick == 2:
delete_name=int(input("Please enter the number of the name you want to remove: "))
delete_name=delete_name-1
del class_list[delete_name]
else:
Habe es mit break und continue versucht wie in der while Schleife, das funktioniert bei der if anweisung aber anscheinend nicht.. wie ihr seht bin ich noch blutiger Anfänger.
Schon mal danke im Vorfeld!
Gruß
Re: if-Anweisung mit Neustart
Verfasst: Samstag 23. Januar 2021, 12:23
von Sirius3
Deshalb brauchst du auch eine while-Schleife
Re: if-Anweisung mit Neustart
Verfasst: Samstag 23. Januar 2021, 13:34
von BT72
Warum machst du keine while-Schleife, aus der du in den If-Fällen raus gehst... entweder indem du die Variable aus der Schleife auf False setzt, oder mit einem break.
Re: if-Anweisung mit Neustart
Verfasst: Samstag 23. Januar 2021, 13:47
von Bl3nder
Sirius3 hat recht.
Nächste mal bitte den Code Button benutzen dann kann man es leichter lesen ... naja nebenbei würde Ich deine liste nicht class nennen....
Code: Alles auswählen
namen_liste = []
while True:
pick = int(input("1=Add name,2=delete Name"))
if pick == 1:
add_name = input("Please enter the name you want to add: ")
namen_liste.append(add_name)
continue
elif pick == 2:
delete_name = int(input("Please enter the number of the name you want to remove: "))
delete_name = delete_name - 1
del namen_liste[delete_name]
continue
else:
break
Ich will dir nur grob zeigen wie es aussieht in dem Programm so wie du es programmiert ist dort aber ein Fehler drinne.
Re: if-Anweisung mit Neustart
Verfasst: Samstag 23. Januar 2021, 14:29
von Sirius3
@Bl3nder: continue sollte man sparsam benutzen, weil es den Programmfluss sehr undurchsichtig macht. Bei deinen Beispiel absolut überflüssig.
Re: if-Anweisung mit Neustart
Verfasst: Samstag 6. Februar 2021, 22:01
von FiftyShadesOfPython
Vielen Dank für Eure Antworten. Hab es wie ihr gesagt habt mit der while- schleife gelöst, bin da irgendwie auf dem Schlauch gestanden.

Danke noch mal!
Re: if-Anweisung mit Neustart
Verfasst: Samstag 6. Februar 2021, 22:01
von FiftyShadesOfPython
Vielen Dank für Eure Antworten. Hab es wie ihr gesagt habt mit der while- schleife gelöst, bin da irgendwie auf dem Schlauch gestanden.

Danke noch mal!
Re: if-Anweisung mit Neustart
Verfasst: Dienstag 9. Februar 2021, 09:39
von Jankie
mit ein bisschen try und except kann man die Eingabe auch so gestalten, dass keine ungültigen Werte weiterverarbeitet werden und das Programm nicht bei einer fehlerhaften Eingabe abstürzt.
Code: Alles auswählen
def main():
names = []
while True:
while True:
try:
choice = int(input("Enter your choice:\n1 - add name\n2 - delete name\n3 - show name list\n> "))
if choice in (1,2,3):
break
else:
raise ValueError
except ValueError:
print("invalid input")
if choice == 1:
name_to_add = input("Please enter the name you want to add: ")
names.append(name_to_add)
print(f"{name_to_add} was added to list.")
elif choice == 2:
name_to_delete = input("Please enter the name you want to delete: ")
if name_to_delete in names:
names.remove(name_to_delete)
print(f"{name_to_delete} was deleted")
else:
print(f"{name_to_delete} is not in list.")
elif choice == 3:
for index, name in enumerate(names):
print(f"{index} - {name}")
print()
Außerdem würde ich nicht del benutzen um Elemente einer Liste zu löschen, sondern entweder remove() um über den Wert zu entfernen, oder pop() um über den Index zu entfernen. Bei deiner Methode fehlt aber noch eine Möglichkeit den Index eines Namens herauszubekommen, das kannst du wie in meinem Beispiel mit enumerate() machen oder auch mit index().
Re: if-Anweisung mit Neustart
Verfasst: Dienstag 9. Februar 2021, 10:00
von Sirius3
@Jankie: hier hast Du zu viele Abstraktionsebenen in einer Funktion. Das Einlesen und Validieren einer Eingabe und die Verarbeitung.
Teile main in mehrere Funktionen:
Code: Alles auswählen
def input_choice():
while True:
try:
choice = int(input("Enter your choice:\n1 - add name\n2 - delete name\n3 - show name list\n> "))
except ValueError:
pass
else:
if choice in (1,2,3):
return choice
print("invalid input")
def main():
names = []
while True:
choice = input_choice()
if choice == 1:
name_to_add = input("Please enter the name you want to add: ")
names.append(name_to_add)
print(f"{name_to_add} was added to list.")
elif choice == 2:
name_to_delete = input("Please enter the name you want to delete: ")
if name_to_delete in names:
names.remove(name_to_delete)
print(f"{name_to_delete} was deleted")
else:
print(f"{name_to_delete} is not in list.")
elif choice == 3:
for index, name in enumerate(names, 1):
print(f"{index} - {name}")
print()
Wenn die Design-Entscheidung ist, dass der Name über den Index entfernt werden soll, dann ist del das Mittel der Wahl, wenn mit dem Rückgabewert von pop gar nichts gemacht wird.