| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: [Python] Error: single quoted string im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Ich habe ein einfaches programmgeschrieben mit dem man währungen umrechnen kann Code: # -*- coding: cp1252 -*- #### ...
![]() |
| | #1 (permalink) |
| Registriert seit: 12.12.07 ![]() Likes: 0 | Anzeige Hallo Ich habe ein einfaches programmgeschrieben mit dem man währungen umrechnen kann Code: # -*- coding: cp1252 -*-
#### Datenbank und Hauptprozedur
def umrechnung(einwaehrung, kurs1, kurs2):
'Vor: Eingaben sind vom Typ integer\
\nEff: gibt den Wert der berechneten Waehrung wieder.'
auswaehrung = kurs2 * einwaehrung / kurs1
return auswaehrung
abkuerzungen = ['EUR', 'DKK', 'GBP', 'JPY', 'HRK', 'NOK',\
'PLN', 'RUB', 'CHF', 'SEK', 'CZK', 'USD']
kurs = [1, 7.4466, 0.8957, 117.6471, 7.4216, 8.8179, 4.7780,\
44.362, 1.4916, 10.8710, 29.1390, 1.2763]
print 'Bitte wählen sie sich die Währungen aus '
print '\
\n1 = EUR = Europa (Deutschland)\
\n2 = DKK = Dänemark\
\n3 = GBP = England\
\n4 = JPY = Japan\
\n5 = HRK = Kroatien\
\n6 = NOK = Norwegen\
\n7 = PLN = Polen\
\n8 = RUB = Russland\
\n9 = CHF = Schweiz\
\n10 = SEK = Schweden\
\n11 = CZK = Tcheschien\
\n12 = USD = USA\'
#### eingabe des kurses
print '1. Währung (die, die umgewandelt wird): ',
kurs1 = raw_input()
while 1:
try:
float(kurs1)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
print 'bitte gib die Währung ein: ',
kurs1 = raw_input()
print '2. Währung (die, in die umgewandelt wird): ',
kurs2 = raw_input()
while 1:
try:
float(kurs2)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
print 'bitte gib die Währung ein: ',
kurs2 = raw_input()
#### eingabe des Wertes
print 'Bitte nun den umzuwandelnden Betrag ein: '
einwae = raw_input
while 1:
try:
float(einwae)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
print 'bitte gib den Wert ein: ',
einwae = raw_input()
#### Rechnung
kurs1.1 = kurs1 - 1
kurs1.2 = kurs[kurs1.1]
kurs2.1 = kurs2 - 1
kurs2.2 = kurs[kurs2.1]
umrechnung(einwae, kurs1.1, kurs2.1)
#### Ausgabe
abkuerzung1 = akuerzungen[kurs1.1]
abkuerzung2 = akuerzungen[kurs2.1]
print '%f %s entsprechen %f %s' %(einwae, abkuerzung1, auswae, abkuerzung2) Code: #### eingabe des kurses
print '1. Währung (die, die umgewandelt wird): ',
kurs1 = raw_input()
while 1:
try:
float(kurs1)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
print 'bitte gib die Währung ein: ',
kurs1 = raw_input() Warum? |
| | |
| | #2 (permalink) |
| Registriert seit: 20.07.06 ![]() Likes: 21 | Der Code an der genannten Stelle ist fehlerfrei. Es wäre hilfreich, wenn du den Traceback sendest. Einiges zu deinem Code: Deine Namensgebungen sind wirklich grausam. Versuche aussagekräftige Variablennamen anzugeben. Deine Kommentare brauchen nur ein # und nicht 4 davon. Die Vorbedingungen etc. in deiner Funktion werden normalerweise in Blockkommentaren dargestellt (""" bla foo bar""") das implizite Verbinden von 2 physikalischen Zeilen zu einer logischen Zeile ist bei abkuerzungen nicht nötig. verwende statt while 1 while True print '2. Währung (die, in die umgewandelt wird): ', kurs2 = raw_input() kann man auch so schreiben: kurs2 = raw_input("2. Währung (die in die umgewandelt wird):") //edit Fehler gefunden: In dem String nach print 'Bitte wählen sie sich die Währungen aus' darf nach USA kein \ mehr stehen. //edit2 in Zeile 50 ist die Einrückung falsch und was soll kurs1.1 sein?! Das ist kein gülitger Variablenname! |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | ||||
| Themenstarter Registriert seit: 12.12.07 ![]() Likes: 0 | So ich mal den Code ein wenig geändert, aber jetzt ist ein anderer Fehler aufgetreten Code: # -*- coding: cp1252 -*-
#### Datenbank und Hauptprozedur
def umrechnung(betrag1, kurs1, kurs2):
'Vor: Eingaben sind vom Typ integer\
\nEff: gibt den Wert der berechneten Betrags wieder.'
betrag2 = (kurs2 * betrag1) / kurs1
return betrag2
abkuerzungen = ['EUR', 'DKK', 'GBP', 'JPY', 'HRK', 'NOK',\
'PLN', 'RUB', 'CHF', 'SEK', 'CZK', 'USD']
kursliste = [1, 7.4466, 0.8957, 117.6471, 7.4216, 8.8179, 4.7780,\
44.362, 1.4916, 10.8710, 29.1390, 1.2763]
print 'Bitte wählen sie sich die Währungen aus '
print '\
\n0 = EUR = Europa (Deutschland)\
\n1 = DKK = Dänemark\
\n2 = GBP = England\
\n3 = JPY = Japan\
\n4 = HRK = Kroatien\
\n5 = NOK = Norwegen\
\n6 = PLN = Polen\
\n7 = RUB = Russland\
\n8 = CHF = Schweiz\
\n9 = SEK = Schweden\
\n10 = CZK = Tcheschien\
\n11 = USD = USA'
#### eingabe des kurses
kurs1 = raw_input('1. Währung (die, die umgewandelt wird): ')
while True:
try:
float(kurs1)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
kurs1 = raw_input('bitte gib die Währung ein: ')
kurs2 = raw_input('2. Währung (die, in die umgewandelt wird): ')
while True:
try:
float(kurs2)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
kurs2 = raw_input('bitte gib die Währung ein: ')
#### eingabe des Wertes
betrag1 = raw_input('Bitte nun den umzuwandelnden Betrag eingeben: ')
while True:
try:
float(betrag1)
break
except:
print '<<<<<<<<Falsche eingabe bitte nochmal eingeben!>>>>>>>>'
betrag1 = raw_input('bitte gib den Wert ein: ')
#### Rechnung
rechnungskurs = kursliste[kurs1]
rechnungskurs1 = kursliste[kurs2]
umrechnung(betrag1, rechnungskurs, rechnungskurs1)
#### Ausgabe
abkuerzung1 = akuerzungen[kurs1]
abkuerzung2 = akuerzungen[kurs2]
print '%f %s entsprechen %f %s' %(betrag1, abkuerzung1, betrag2, abkuerzung2) Code: Traceback (most recent call last):
File "I:\Informatik\Neuer Ordner\umrechner.py", line 66, in ?
rechnungskurs = kursliste[kurs1]
TypeError: list indices must be integers Dass ich kein Traceback gesendet habe lag daran, das mir keins angezeigt wurde. Zitat:
Zitat:
Zitat:
Ich hab es trotzdem geändert. Zitat:
trotzdem danke MfG Shadow94 | ||||
| | |
| | #4 (permalink) |
| Guest Likes: | Dein Input ist ein String. Du musst also Casten. Aber was du in diesem Fall haben willst ist eine Woerterbuch. Alternativ kannst du auch jede umrechnung in eine eigene Methode Packen und dann mittels getattr() ein message passing ausfuehren und sodie Funktion ausfuehren. |
|
| | #5 (permalink) |
| Themenstarter Registriert seit: 12.12.07 ![]() Likes: 0 | @ sw33tlull4by: du musst wissen, dass das mein erstes schuljahr in Informatik ist. Also ist dein Post, für mich, größten teils Fachchinesisch. Könntest du es mir bitte nochmal etwas deutlicher erklären? Danke |
| | |
| | #6 (permalink) |
| Guest Likes: | Also Casten "2" der String int("2") die Zahl str(int("2")) der String So nun zu dem Woerterbuch: Du hast 2 Listen, welche beide was miteinander zu tun haben(Waehrungsabkuerzung,Wert) Das schreit geradezu nach einem Woerterbuch. Ein Woerterbuch ist eine Liste auf die du ueber Indizes Zugreisfst und nicht ueber die Stelle. Also: test = {"hallo":2} die {} sind wichtig. wenn nun test["hallo"] eingibst bekommst du 2 zurrueck. Und was das mit dem message passing soll: Sagen wir du hast eine Datei test.py in dieser stehen 2 funktionen wa und na. wenn du oho = getattr(test,"wa") eingibst enthaelt oho die adresse von der Funktion wa nun rate mal was oho() macht mfg sw33t |
|
| | #7 (permalink) |
| Themenstarter Registriert seit: 12.12.07 ![]() Likes: 0 | Meinst du nicht sie ruft na auf? Sonst würde die Funktion na im programm ja keinen Nutzen haben. |
| | |
| | #8 (permalink) |
| Guest Likes: | nein na ist nur um dir zu verdeutlichen das du genau die Funktion aufrufst nach welcher du mit getattr() in test gesucht hast. Probiers einfach mal aus und du siehst was ich meine. |
|
| | #9 (permalink) |
| Registriert seit: 20.07.06 ![]() Likes: 21 | Schau dir mal den PEP 8 Styleguide an. @sw33tlull4by Der Typ von kurs1 ist nicht String sondern Float. Zudem ist ein Dictonary ein eigener Datentyp und hat absolut nichts mit listen zu tun! @Shadow Kurs1 muss dementsprechend in den Typ Integer umgewandelt werden, denn was soll bei einer liste das 2.5 Element sein? ![]() Hier mal eine etwas umgewandelte Version: Code: #! /usr/bin/env python
# -*- coding: UTF-8 -*-
waehrung = {"EUR" : 1.0, "DKK" : 7.4466, "GBP" : 0.8957, "JPY" : 117.6471, "HRK" : 7.4216}
def eingabe():
print 'Bitte wählen sie sich die Währungen aus \n'
print """0 = EUR = Europa (Deutschland)\n
1 = DKK = Dänemark\n
2 = GBP = England\n
3 = JPY = Japan\n
4 = HRK = Kroatien\n
"""
while True:
kurs1 = raw_input("1. Währung: ")
kurs2 = raw_input("2. Währung: ")
betrag = raw_input("Betrag: ")
if (waehrung.has_key(kurs1) and waehrung.has_key(kurs2)):
try:
betrag = float(betrag)
break
except:
print "<<<<<<<<Falscher Betrag!>>>>>>>>"
else:
print "<<<<<<<<<<Falsche Währung!>>>>>>>>>>>>"
umrechnung(betrag, kurs1, kurs2)
def umrechnung(betrag, kurs1, kurs2):
umgerechneter_betrag = (waehrung[kurs1] * betrag) / waehrung[kurs2]
ausgabe(betrag, umgerechneter_betrag, kurs1, kurs2)
def ausgabe(betrag, umgerechneter_betrag, kurs1, kurs2):
print "%f %s entprechen %f %s" %(betrag, kurs1, umgerechneter_betrag, kurs2)
raw_input()
eingabe() |
| | |
| | #10 (permalink) |
| Guest Likes: | @darkslide Der Type von kurse1 ist ein String, Du haettest recht wenn er kurs1 = input() genommen haette raw_input() liest aber alles als einen String. Und das ein Dictionary ein eingenstaendiger Datentyp ist ist mir schon klar. Mir ging es halt nur darum die Funktion des Dictionaries zu vergleichen. Besonders toll ist es wenn ein Dictionary als Schluesse fortlaufende Indizes von 0 bis n Integers hat. Dann gibt es naehmlich beim abruf der enthaltenen Elemente keinen Unterschied. Der Grund wiso ich hier das Dictionary eingefuegt habe ist der das es in shadows fall praktikabeler waere. sorry fuer OT. |
|
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Python String aus mehreren Variablen und Text | ba2 | Code Kitchen | 4 | 15.02.08 18:02 |
| Single- to Multicore | e5s3x | Code Kitchen | 9 | 04.12.07 08:22 |
| Python String zerlegen | ba2 | Code Kitchen | 3 | 25.07.07 15:39 |
| Seid ihr Single ??? | Honeywell | Umfragen | 80 | 26.08.05 09:41 |
| Quoted-printable-Verfahren | Dawen | Cryptography & Encryption | 2 | 06.07.05 00:06 |