Datentypkonvertierung

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
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Ich bin wieder mal am klein anfangen :-) Nun würde mich interessieren ob die Konvertierung des Datentypes von int zu zb str immer notwendig ist, wenn man zum Beispiel eine Berechnung macht (braucht zb int) und das Ergebnis dann im Zuge der Print-Funktion ausgibt.

Zur Veranschaulichung mein "tolles" Programm:

Code: Alles auswählen

print ('Hallo, ich sage dir, wie viele Zeichen du eingegeben hast!')
text = raw_input("Text: ")
zeichen = len(text)
zeichen = str(zeichen) ##Umwandlung in str, damit mit Verbindung mit str möglich
print ('Du hast ' + zeichen + ' Zeichen (mit Leerzeichen) eingegeben.')

leerzeichen = text.count(' ')
leerzeichen = str(leerzeichen)
print ('Im Text wurde(n) ' + leerzeichen + ' Leerzeichen verwendet.')

zeichen = int(zeichen)
leerzeichen = int(leerzeichen)
zeichen_ohne_leerzeichen = zeichen - leerzeichen
zeichen_ohne_leerzeichen = str(zeichen_ohne_leerzeichen)

print ('Somit waren das ohne Leerzeichen ' + zeichen_ohne_leerzeichen + ' Zeichen')
Ich wandle also, je nachdem was ich grade brauche, die Datentypen immerwieder von int nach str und umgekehrt.

Ist das i.O. so, oder eher schlechter Stil?
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das ist eher schlechter Stil. Besser wäre sowas:

Code: Alles auswählen

>>> eingabe = raw_input('Text: ')
Text: blablupp
>>> print 'Du hast {0} Zeichen eingegeben.'.format(len(eingabe))
Du hast 8 Zeichen eingegeben.
Das Stichwort heißt "String Formatting". Ja, danach kann man auch suchen... ;P

Zudem scheinst du Python 2.x zu benutzen. Dort ist `print` keine Funktion und sollte daher auch ohne Klammern geschrieben werden. :)
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Stimmt, ich mische schon wieder! Wollte nun eigentlich doch Python 3.x verwenden. Da gibts dann aber eigentlich wieder kein raw_input.
deets

Dafuer ist input dann so wie raw_input.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Hm, nicht einfach. Ich hab eventuell vor, das ganze dann -so ich es mal verstanden hab- auch in Richtung Web zu verwenden. Da heißts ja eigentlich, dass 2.7 die bessere Wahl ist. Allerdings ists für mich als Anfänger wohl eher vermessen, jetzt schon in diese Richtung zu denken.

Andererseits will ich nicht 2.7 lernen und dann feststellen, dass es doch besser gewesen wäre, auf 3.x zu setzen.

Da 2.7 allerdings erst vor kurzem ein Update erfahren hat, wirds das wohl auch noch länger geben ;-)
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Python 2.7 wird es sogar noch mehrere Jahre geben. Die Situation mit Python 3.x ist nach wie vor etwas verzwickt: Den Zweig an sich empfinde ich durchaus als Bereicherung. Insbesondere auch im Hinblick auf die "Encoding-Hell" (Probleme/Fallstricke in Python 2.x bei Verwenung von Umlauten, usw.). Leider sind aber einige externe Bibliotheken bisher noch nicht auf Python 3.x portiert. Ich würde an deiner Stelle einfach überlegen, welche Lib du verwenden willst und dann abchecken, ob sie unter Python 3 läuft.

Falls du Linux verwendest, dann willst vielleicht lieber das "Standard-Python" (also diejenige Version, die durch den Befehl `python` aufgerufen wird) verwenden. Das ist bei den meisten aktuellen Distris derzeit Python 2.7.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Ok, dann werd ich mich nun definitiv Python 2.7.2 zuwenden, das übrigens gerade unter Win7 abgestürzt ist und sich trotz de- und reinstallation nicht mehr starten lässt (IDLE mein ich). Ein Klick auf IDLE geht quasi ins Leere es tut sich nix...

Komisch!
Ich weiß ja, warum ich Windows nicht mag ^^

Update: Läuft wieder ... nicht mehr

Interessant:

Code: Alles auswählen

import random
x = random.randint(1,10)
print x
führt dazu, dass python 2.7 unter Win7 abstürzt und sich die GUI nicht mehr starten lässt...
Zuletzt geändert von mcdaniels am Donnerstag 29. September 2011, 11:17, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sorry, aber das ist das übliche OS-Bashing-Blabla. Ein Mac OS X oder ein Linux können in vielen Situationen genau so rumzicken. Einfach mal den Fehler genauer analysieren und dann bei Bedarf am Besten einen Thread im Installieren/Konfigurieren-Forum dazu aufmachen. ;)

//edit: Hat sich wohl eh schon erledigt. Fein. :)
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

mcdaniels hat geschrieben:Interessant:

Code: Alles auswählen

import random
x = random.randint(1,10)
print x
führt dazu, dass python 2.7 unter Win7 abstürzt und sich die GUI nicht mehr starten lässt...
Vielleicht ein Bug in IDLE? Teste es mal zum Vergleich in der Kommandozeile von Windows.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Ausserhalb der GUI also in der Eingabeaufforderung erhält man:

Code: Alles auswählen

AttributeError: 'module' object has no attribute 'randint'
Komisch, dass sich die Gui jetzt wieder nicht mehr starten lässt.

Update: Soeben unter Debian Squeeze (allerdings Python 2.6) versucht... läuft. (kein Bashing nur ne Info :-) )

Hab jetzt im Forum Installieren/Konfigurieren einen neuen Thread eröffnet.

LG
BlackJack

@mcdaniels: Du hast höchstwahrscheinlich selbst ein `random`-Modul geschrieben, so dass dieses anstelle des Moduls aus der Standardbibliothek geladen wird.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

...ja so ist es! :oops: ich ....!
Antworten