Dictionary_syntaxerror

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
alex1401
User
Beiträge: 8
Registriert: Mittwoch 18. Oktober 2017, 11:28

Code: Alles auswählen

import sys
def main():
	w = raw_input("Zahl: ")
	name = [(0,2): 2.54 , (0,3): 30.48 , (1,2): 39.37 , (1,3): 3.28084]
	out = name[o]*w
	print out
	
weiß jemand vielleicht, warum ich immer bei "name = [(0,2): 2.54 , (0,3): 30.48 , (1,2): 39.37 , (1,3): 3.28084]" beim Doppelpunkt ein "invalid syntax" bekomme? Hab ja beides definiert :?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@alex1401: Wörterbücher schreibt man mit geschweiften Klammern »{}«.
alex1401
User
Beiträge: 8
Registriert: Mittwoch 18. Oktober 2017, 11:28

Code: Alles auswählen

import sys
def main():
	w = raw_input("Zahl: ")
	name = {2,3,4}
	out = name[0]*w
	return out
	
	
	
	
	
	
if __name__=="__main__": 
	main()

	

wenn ich das jetzt ausführe bekomme ich den fehler "set" object does not support indexing.

ich bin am verzweifel. jedes mal wenn ich glaub einen fehler eliminiert zu haben, taucht ein neuer auf :cry:
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@alex1401: Programme kann man nicht durch Raten schreiben. Was willst Du eigentlich erreichen?
alex1401
User
Beiträge: 8
Registriert: Mittwoch 18. Oktober 2017, 11:28

ich muss ein programm schreiben, welches meter bzw centimeter in inches oder foot umwandelt.
dafür hab ich ein dictionary angelegt wo ich den jeweiligen umrechnungsfaktor eingetragen hab.
jetzt muss ich abfragen:
-was willst du umwandeln
-den wert
-und in was es umgewandelt werden soll

Code: Alles auswählen

import sys
def main():
	xxx = {"0,2":2.54, "0,3":30.48, "1,2":39.37, "1,3":3.28084, "2,0":2.54, "3,0":30.48, "2,1":39.37, "3,1":0.3048}
	print (xxx)
   #x = xxx["0,2"]*100
   #print x
	print "Please select input unit type:"
	print "0: centimeters"
	print "1: meters"
	print "2: inches"
	print "3: feet"
	x = raw_input
   
   
   
if __name__=="__main__":
    main()
	
	
	


soweit bin ich bis jetzt gekommen. das dictionary funktioniert jetzt zumindest.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

raw_input ist eine Funktion. Die musst du schon aufrufen, sonst passiert da nix. Und dein Dictionary mag zar durchgehen, aber dein Vorgehen, eine einzigen Umrechnungsfaktor zu bilden und den mit einem zusammengesetzten Schlüssel abzulegen ist milde gesagt unorthodox.

Besser ist alles zB in cm und dann in die gewünschte Zielmasseinheit umzuwandeln. Also zwei dicts, in denen jeweils nur eine Zahl auf einen Faktor abgebildet wir.

Grund dafür ist alleine schon die kombinatorische Explosion, die du hast: wenn du n Einheiten hast, brauchst du n^2 Einträge. Und bei einer dazu legst du dann n+1 mehr an. Statt nur zwei.
alex1401
User
Beiträge: 8
Registriert: Mittwoch 18. Oktober 2017, 11:28

ich probiers mal mit deiner Methode^^
aber kannst du mir vielleicht noch verraten warum bei

Code: Alles auswählen

x == 0
bei mir invalid syntax kommt?
hab halt " if x == 0" und x auch definiert
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da kommt keine invalide Syntax. Du musst was drumrum gemacht haben, das nicht passt. Und damit man dem auf die Sprünge kommt poste bitte deine GESAMTEN Code, und die echte Fehlermeldung.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: falls Du seinen anderen Thread schon gesehen hast, würde ich sagen, dass zwei Dicts ziemlich unorthodox sind.
alex1401
User
Beiträge: 8
Registriert: Mittwoch 18. Oktober 2017, 11:28

hab das hier jetzt hergezaubert und es funktioniert. bin mir übrigens im klaren, dass das dictionary in dem fall für die katz ist :D

Code: Alles auswählen

import sys
def main():
	xxx = {"0,2":2.54, "0,3":30.48, "1,2":39.37, "1,3":3.28084, "2,0":2.54, "3,0":30.48, "2,1":39.37, "3,1":0.3048}
	
	print "Please select input unit type:"
	print "0: centimeters"
	print "1: meters"
	print "2: inches"
	print "3: feet"
	x = int(input())
	print "Please specifcy the value"
	v = int(input())
	print "Please specificy the unit to convert to"
	print "0: centimeters"
	print "1: meters"
	print "2: inches"
	print "3: feet"
	t = int(input())
	
	if x == 0 and t == 2:
		value = xxx["0,2"]*v
		print value
		
	elif x == 0 and t == 3:
		value = v/xxx["0,3"]
		print value
		
	elif x == 1 and t == 2:
		value = v*xxx["1,2"]
		print value
	
	elif x == 1 and t == 3:
		value = v*xxx["1,3"]
		print value
		
	elif x == 2 and t == 0:
		value = v/xxx["2,0"]
		print value
		
	elif x == 3 and t == 0:
		value = v*xxx["3,0"]
		print value
		
	elif x == 2 and t == 1:
		value = v/xxx["2,1"]
		print value
		
	elif x == 3 and t == 1:
		value = v*xxx["3,1"]
		print value
		
	else:
		print "wrong"
   
   
if __name__=="__main__":
    main()
	

Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Also wenn ich mir deinen Code so ansehe, dann möchte ich nicht wissen, wie du ein Regal aufbauen würdest... :mrgreen:

Was stört dich eigentlich an diesem Ansatz?
Du weißt schon, dass du gern nachfragen kannst, wenn du bestimmte Stellen nicht verstehst? Oder geht es darum, dass es eben nicht von dir gebastelt wurde?
Antworten