Home > OS >  New at Python//Dictionaries and lists
New at Python//Dictionaries and lists

Time:10-15

I have two different Codes and i want to know Why one of them dont work? Thanks for ur help.

#1

fahrzeug1 = dict(marke = "VW", modell = "Golf", Baujahr=2012, preis= 2500)
fahrzeug2 = dict(marke="Porsche",modell="cayman", baujahr=2019, preis=21999)
fahrezeug3= dict(marke="BMW",modell="3er",baujahr=2014, preis=8000)

listefahrzeuge = [fahrzeug1,fahrzeug2,fahrezeug3]

max = eval(input("Geben sie bitte ihren höchst Preis an: "))

if fahrzeug1["preis"] <= max:
    print(fahrzeug1, "\n")
if fahrzeug2["preis"] <= max:
    print(fahrzeug2, "\n")
if fahrezeug3["preis"] <= max:
    print(fahrezeug3, "\n")

#2

fahrzeug1 = dict(marke = "VW", modell = "Golf", Baujahr=2012, preis= 2500)
fahrzeug2 = dict(marke="Porsche",modell="cayman", baujahr=2019, preis=21999)
fahrezeug3= dict(marke="BMW",modell="3er",baujahr=2014, preis=8000)

listefahrzeuge = [fahrzeug1,fahrzeug2,fahrezeug3]

max = eval(input("Geben sie bitte ihren höchst Preis an: "))

if listefahrzeuge[0][3] <= max:
    print(fahrzeug1, "\n")
if listefahrzeuge[1][3] <= max:
    print(fahrzeug2, "\n")
if listefahrzeuge[2][3] <= max:
    print(fahrezeug3, "\n")

CodePudding user response:

eval should be replaced with either an int or a float depending on what you're looking for.

Also with noting that eval will allow the user to input arbitrary code and execute that code -- this presents a security risk in a lot of cases, you generally should avoid using eval.

The other issue is listefahrzeuge is a list of dictionaries, not a list of lists so listefahrzeuge[0][3] needs to be replaced with listefahrzeuge[0]['preis']

For what it's worth you can replace this:

if fahrzeug1["preis"] <= user_input:
    print(fahrzeug1, "\n")
if fahrzeug2["preis"] <= user_input
    print(fahrzeug2, "\n")
if fahrezeug3["preis"] <= user_input:
    print(fahrezeug3, "\n")

with this:

for d in listefahrzeuge:
  if d['preis'] <= user_input:
    print(d)
  • Related