Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[Python] Error: single quoted string

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 -*- #### ...

Antwort
Alt 17.02.09, 20:32   #1 (permalink)
 
Registriert seit: 12.12.07
Shadow94 Leistung: Facit NTK
Likes: 0
Standard [Python] Error: single quoted string

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)
doch an der der Stelle
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()
Zeigt mir python ein error an.
Warum?
Shadow94 ist offline   Mit Zitat antworten
Alt 17.02.09, 20:45   #2 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 21
Standard

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!
Darkslide ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.02.09, 15:21   #3 (permalink)
Themenstarter
 
Registriert seit: 12.12.07
Shadow94 Leistung: Facit NTK
Likes: 0
Standard

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)
Fehlermeldung:
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
@ Darkslide:
Dass ich kein Traceback gesendet habe lag daran, das mir keins angezeigt wurde.

Zitat:
Deine Kommentare brauchen nur ein # und nicht 4 davon.
Ich mache nur zur Unterteilung des Codes 4# anstatt 1#, das hilft mir besser im code zurecht zufinden.

Zitat:
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):")
Daran hab ich einfach nicht gedacht.

Zitat:
verwende statt while 1 while True
Das hatten wir im Informatik Unterricht noch nicht, aber es ist ja das gleiche.
Ich hab es trotzdem geändert.

Zitat:
Deine Namensgebungen sind wirklich grausam. Versuche aussagekräftige Variablennamen anzugeben.
Gut da hast du recht. ich habe sie mal ein wenig überarbeitet.

trotzdem danke


MfG Shadow94
Shadow94 ist offline   Mit Zitat antworten
Alt 18.02.09, 15:42   #4 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

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.
  Mit Zitat antworten
Alt 18.02.09, 15:58   #5 (permalink)
Themenstarter
 
Registriert seit: 12.12.07
Shadow94 Leistung: Facit NTK
Likes: 0
Standard

@ 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
Shadow94 ist offline   Mit Zitat antworten
Alt 18.02.09, 16:12   #6 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

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   
ruft die Funktion wa auf

mfg

sw33t
  Mit Zitat antworten
Alt 18.02.09, 17:25   #7 (permalink)
Themenstarter
 
Registriert seit: 12.12.07
Shadow94 Leistung: Facit NTK
Likes: 0
Standard

Meinst du nicht sie ruft na auf?
Sonst würde die Funktion na im programm ja keinen Nutzen haben.
Shadow94 ist offline   Mit Zitat antworten
Alt 18.02.09, 17:32   #8 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

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.
  Mit Zitat antworten
Alt 18.02.09, 19:58   #9 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 21
Standard

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()
Darkslide ist offline   Mit Zitat antworten
Alt 19.02.09, 19:19   #10 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

@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.
  Mit Zitat antworten
Alt 19.02.09, 19:44   #11 (permalink)
 
Registriert seit: 20.07.06
Darkslide Leistung: Facit NTK
Likes: 21
Standard

Dann schau mal in seinem 2. Quelltext in Zeile 38 . Ich habe dich deswegen korrigiert, weil er, wie er selber zugibt, noch ein Anfäng ist und sich daher nicht von Anfang an falsche Begriffe oder Erläuterungen einprägen soll.
Darkslide ist offline   Mit Zitat antworten
Alt 19.02.09, 19:45   #12 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

...owned...
  Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [Python] Error: single quoted string
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61