Python elif eval

BloodRocks

Lt. Junior Grade
Registriert
Okt. 2021
Beiträge
365
Ich lese gerade ein EBook über python und da gibt es zwei Befehle, die ich nicht verstehe.
1. "elif"
2. "eval"
 
Und was verstehst du daran nicht?
 
  • Gefällt mir
Reaktionen: mental.dIseASe, blubberz, Bitopium und eine weitere Person
"elif" == "else if", für weitere bedingungen nach einem "if". "eval" -> führt einen string als python-code aus. sollte man nach möglichkeit nicht verwenden, es besteht die gefahr, dass ungeprüfter code ausgeführt wird.
 
  • Gefällt mir
Reaktionen: BloodRocks
Man schreibt doch if und dann else. Braucht man elif für weitere Alternativen?
 
a = input("Bitte Zahl zwischen 0 und 10 eingeben: ")
if a == 0 :
print ("eingabe ist 0")
elif a > 0 :
print ("eingabe > 0")
elif a > 5 :
print ("eingabe > 5")
elif a == 10 :
print ("eingabe = 10")
Scheint nicht zu gehen
Screenshot_20231231_004220_Coding Python.jpg
 
du willst einen eingegebenen string mit einem int vergleichen, das kann nicht gehen. steht auch in der fehlermeldung.
 
  • Gefällt mir
Reaktionen: kuddlmuddl
Das ist der Mist mit untypisierten Sprachen, dass sie natürlich doch Datentypen haben und solche Sachen Dir erst zur Runtime um die Ohren fliegen. Die nicht vorhandene Typisierung wird nur vorgegaukelt und kann noch viel schlimmere Probleme machen, für mich sind die Nachteile größer als die vermeintlichen Vorteile. Aber das ist eine andere Diskussion...

Und wenn Du das gelöst hast, macht der Code trotzdem nicht was Du möchtest nehme ich an. Zumindest wüsste ich nicht, wann die letzten beiden elif Fälle zur Anwendung kommen sollten.
 
  • Gefällt mir
Reaktionen: Arc Angeling, mental.dIseASe und simpsonsfan
Gute Argumentation. 🙄

Wie definierst Du streng typisiert?

https://de.m.wikipedia.org/wiki/Dynamische_Typisierung

Da steht sogar Python als eins der ersten Beispiele.

https://de.m.wikipedia.org/wiki/Starke_Typisierung

Natürlich hat jede Variable im Speicher einen Typ bzw eine definierte Anzahl Bytes reserviert. Aber ich muss während des Programmierens keine Angabe zum Typ machen was für mich die Definition von keiner/dynamischer Typisierung ist, wie Du das Kind auch immer nennen willst.

Ich kann zwar Annotations machen, aber die haben keine Auswirkung auf den Unterpeter, bestenfalls, damit Dir die IDE ein paar Hinweise geben kann...
 
Drexel schrieb:
Aber ich muss während des Programmierens keine Angabe zum Typ machen was für mich die Definition von keiner/dynamischer Typisierung ist, wie Du das Kind auch immer nennen willst.
Das passt gedanklich nicht wirklich. Beim var-Typ in Java oder C# muß man auch keine Angabe zum Typ machen. Für alles gibt es Definitionen und entsprechende Fachbegriffe.
 
Ja dann erhelle mich bitte mit Deinen Fachbegriffen und Definitionen.

In C# kam der var Type nachträglich und wenn man Typangaben macht, überprüft der Compiler sie auch strikt. Und Du hast jederzeit Sicherheit welche Datentypen Du vergleichst etc. Außerdem hat eine var Variable, wenn Sie einmal zugewiesen wurde genau diesen Typ und kann keinen anderen Typ mehr zugewiesen bekommen. In Python geht das afaik schon. Damit wäre Python auch nicht streng typisiert. Aber das müsste ich mal ausprobieren, mit Python mach ich erst seit ein paar Wochen was.

Aber Deine Definition ist mit Sicherheit eine andere.

Edit: https://stackoverflow.com/questions/11328920/is-python-strongly-typed

Python ist streng und dynamisch typisiert. =)
 
Drexel schrieb:
In C# kam der var Type nachträglich und wenn man Typangaben macht, überprüft der Compiler sie auch strikt.
In C# oder Java überprüft der Compiler den Typen des var selbstverständlich.

Drexel schrieb:
Python ist streng und dynamisch typisiert.
Also doch typisiert und damit das Gegenteil von "untypisierten Sprachen … nicht vorhandene Typisierung"
 
Ich habe jetzt ein Programm, mit dem es funktioniert
a = eval(input("Bitte Zahl zwischen 0 und 10 eingeben: "))
if a == 0 :
print ("eingabe ist 0")
elif a > 0 and a < 5:
print ("eingabe > 0")
elif a > 5 and a <10 :
print ("eingabe > 5")
elif a == 10 :
print ("eingabe = 10")
 
  • Gefällt mir
Reaktionen: Drexel
Sehr gut. In den elifs kannst Du Dir das >0 und >5 sparen. Der erste zutreffende Fall wird ausgeführt, die Bedingungen danach nicht mehr.

Allerdings wird für die Fälle <0 und >10 nichts ausgeführt. Weiß nicht ob das gewünscht ist.
 
BloodRocks schrieb:
Ich habe jetzt ein Programm
Kann man so machen, ist nichts Falsches dran. Dennoch schadet es nichts, sich weiter zu überlegen, wie es sonst gehen könnte. Pseudocode:
Code:
Wenn a<0:
  //a kleiner null
sonst wenn a>10:
  //a ist größer 10
sonst wenn a>5:
  //a zwischen 5 und 10
sonst wenn a>0:
  //a zwischen 0 und 5
sonst:
  //a ist genau 0 (oder gar keine Zahl)
Insbesondere bei Ganzen Zahlen ist dann natürlich auch immer auf die Randbereiche zu achten.
 
liste = [3, 6, 123, 54, 927] print (liste) for inhalt in enumerate(liste):
liste[inhalt[0]] = inhalt[1] * 2 print (liste)
Kann mir jemand erklären, wie dieses Programm funktioniert? Ich verstehe es nicht.
 
Zurück
Oben