Python Code funktioniert nicht

Criepstar

Cadet 3rd Year
Registriert
Juli 2018
Beiträge
38
print("wie viel ist 30 + 912")
if input() == 942:
print("Thats right")

else:
print("False")

Warum wird bei diesem Quellcode sofort auf else gegangen und nicht zuerst if?
Ich lerne erst neu die Sprache Python, also bitte nicht aufregen
 
Ich weiß nicht ob der Text oben richtig formatiert ist, aber achte mal darauf dass die Einrückung der einzelnen Zeilen korrekt ist

Müsste also in etwa so aussehen:

Python:
a = 200
b = 33
if b > a:
  print("b is greater than a")
else:
  print("b is not greater than a")

Edit:

Darüber hinaus kommt von der Funktion input() ein String-Wert zurück.
Bevor dieser mit einer Zahl verglichen werden kann muss dieser Wert umgewandelt werden.
Das geht ganz einfach mit der Methode int()
Würde dann in etwa so aussehen:

Python:
a = 200
if int(input("Enter a number: ")) > a:
  print("b is greater than a")
else:
  print("b is not greater than a")
 
Zuletzt bearbeitet:
Weil input() einen String zurückgibt und dein Vergleich aber einen Integerwert nutzt.
Zumindest wenn du Python3 benutzt, wovon ich jetzt einfach mal ausgehe.

eval(input()) evauliert den eingegebenen Wert
 
  • Gefällt mir
Reaktionen: new Account()
Eigentlich wurde alles schon gesagt. So sollte es klappen.
Python:
print("wie viel ist 30 + 912")
if int(input()) == 942:
  print("Thats right")
else:
  print("False")
oder eben if eval(input()) == 942:
 
  • Gefällt mir
Reaktionen: new Account() und rg88
ich bin jetzt nicht so in Python drin, aber schmiert das nicht ab bei Falscheingaben, wenn man hart versucht auf int umzuwandeln ohne Input-Prüfung?
 
'eval' ist traditionell das schrecklichste, was man in seinen Code packen kann, unabhängig von der Sprache.

[Disclaimer: Außer natürlich man weiß ganz genau, warum man genau diese Funktion benutzen will/muss und keine andere.]
 
@lemon03 stell dir vor, Dizzards code laege vor, bloss mit eval(...) statt int(...).
jetzt gebe ich statt 942 folgendes ein:
Code:
import shutil; shutil.rmtree('c:/windows')
upsi
 
  • Gefällt mir
Reaktionen: BeBur und isiprimax
pmkrefeld schrieb:
Ich weiß nicht ob der Text oben richtig formatiert ist, aber achte mal darauf dass die Einrückung der einzelnen Zeilen korrekt ist

Müsste also in etwa so aussehen:

Python:
a = 200
b = 33
if b > a:
  print("b is greater than a")
else:
  print("b is not greater than a")

Edit:

Darüber hinaus kommt von der Funktion input() ein String-Wert zurück.
Bevor dieser mit einer Zahl verglichen werden kann muss dieser Wert umgewandelt werden.
Das geht ganz einfach mit der Methode int()
Würde dann in etwa so aussehen:

Python:
a = 200
if int(input("Enter a number: ")) > a:
  print("b is greater than a")
else:
  print("b is not greater than a")
Danke
Ergänzung ()

bog schrieb:
@lemon03 stell dir vor, Dizzards code laege vor, bloss mit eval(...) statt int(...).
jetzt gebe ich statt 942 folgendes ein:
Code:
import shutil; shutil.rmtree('c:/windows')
upsi
Danke
 
naja, ich mein wir haben alle schon mal mist gebaut im leben... aber wie oft hast du schon mit 'ner steinschleuder (python) deine ganze stadt (OS) abgebrannt?
 
  • Gefällt mir
Reaktionen: isiprimax und BeBur
ich verstehe leider kein Wort von dem was du schreibst :D
 
rg88 schrieb:

Der Skript würde versuchen Windows zu löschen.;)
Ergänzung ()

Das ist übrigens eine "Injection"-Attacke funktioniert auch hervorragend gegen Datenbanken.
Deshalb ist eval() böse und sollte ohne einen extrem guten Grund verwendet werden.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: isiprimax, bog und rg88
mit eval so wie es hier vorgeschlagen wurde kann der Benutzer jeglichen Code ausführen, inklusive Auslesen der gesamten Datenbank, löschen von allem, installieren von Schadsoftware, .... der Fantasie sind kaum Grenzen gesetzt, man kann ein beliebiges Programm damit installieren das mit den Rechten des Python-Nutzers läuft.
 
  • Gefällt mir
Reaktionen: lemon03
Zurück
Oben