Seite 1 von 1

Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:32
von Weltbesiedler
http://tutorial.pocoo.org/introduction.html

Bei dem Punkt 3.1.1:

"Die Konvertierungsfunktionen in Fließkommazahlen und Ganzzahlen (float(), int()) stehen für komplexe Zahlen nicht zur Verfügung. Man kann abs(z) verwenden, um den Betrag einer komplexen Zahl (als Fließkommazahl) zu berechnen, oder z.real, um den Realteil zu erhalten:"

Code: Alles auswählen

a = 3.0 + 4.0j
>>> float(a)
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
TypeError: can't convert complex to float; use abs(z)
>>> a.real
3.0
>>> a.imag
4.0
>>> abs(a)  # sqrt(a.real**2 + a.imag**2)
5.0
>>>
Da steht doch, dass man die Konvertierungsfunktion bei komplexen Zahlen nicht benutzten kann. Aber wenn wann abs(z) schreibt, geht das anscheinend, oder habe ich da was falsch verstanden? Und was bedeutet das abs(z)?

Und was ist der Realteil un der Imaginärteil, wie vor wenigen Zeilen beschrieben?

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:34
von jbs
Dazu solltest du komplexe Zahlen verstehen.

Edit: abs steht für den Betrag: http://de.wikipedia.org/wiki/Komplexe_Z ... lexen_Zahl

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:36
von Weltbesiedler
So neues Problem:

"Im interaktiven Modus wird der zuletzt ausgegebene Ausdruck der Variablen _ zugewiesen. Die ist besonders hilfreich, wenn man den Python-Interpreter als Taschenrechner einsetzt"

Code: Alles auswählen

tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
>>>
Was bedeutet dieses Zeichen "_" überhaupt? Und was ist round, und warum kommt 113.0625 raus, wenn man price mit "_" addiert?
Weil normalerweise ist doch "_" gar nicht definiert. Das wird auch im SPE angezeigt, nur nicht im Python-Shell. Und was ist ein "Ausruck"? Das wäre doch in dem Fall dann price, dem wurde ja die Zahl 100.50 zugewiesen, oder handelt es sich doch um price * tax? Ich blick da gar nicht mehr durch... :K

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:37
von HerrHagen
Natürlich kann man eine komplexe Zahl in einen Integer bzw Float umwandeln. Nur halt nicht mit der (sonst gebräuchlichen Funktionen) int bzw. float Funktion.

Code: Alles auswählen

>>> x = 3 + 4j
>>> x
(3+4j)
>>> int(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't convert complex to int; use int(abs(z))
>>> float(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float; use abs(z)
>>> abs(x)
5.0
>>> int(abs(x))
5
EDIT: was in 5min alles so passiert...

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:40
von Weltbesiedler
Hm, trotzdem habe ich das noch nicht ganz kapiert. Was bedeutet das abs jetzt?

@ jbs:

Das soll ich jetzt als 13-jähriger verstehen?

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:43
von jbs
Du hast gefragt.
Überspring sonst einfach den Teil mit den komplexen Zahlen.

Wie schon im Tutorial steht. _ beinhaltet den letzen zurückgegebenen Wert.

Code: Alles auswählen

>>> 2*2
4
>>> print _
4
>>>

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:45
von jbs
Ich denke selbst als 13-jähriger dürftest du darauf kommen, dass round runden beteuten könnte. Und das hatte ich in der Grundschule. Zur Not: in der Doku nachschauen.

Ausdruck ist in diesem Fall etwa der vornehme Ausdruck für Ding, welches eben zurückgegeben wurde.

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:46
von HerrHagen
Als 13-jähriger musst du dich auch nicht mit komplexen Zahlen auseinandersetzten.

round(x, 2) rundet die Zahl x auf die letzten 2 Stellen.

_ ist ein Unterstrich und als solcher ein ganz normales Zeichen. Im interaktiven Modus wird das letze Ergebnis einfach an diesen Namen gebunden. Es hätte genauso gut x sein können. Man hat sich halt aus praktischen Gründen für _ entschieden.

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:52
von hendrikS
HerrHagen hat geschrieben:Natürlich kann man eine komplexe Zahl in einen Integer bzw Float umwandeln. Nur halt nicht mit der (sonst gebräuchlichen Funktionen) int bzw. float Funktion.
Ich finde die Aussage etwas verwirrend. Wenn Du abs anwendest, bildest Du ja lediglich den Betrag. Mit umwandeln hat das wenig zu tun. Zur vollständigen Umwandlung müsstest Du ja noch den Winkel bestimmen.

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 17:56
von Weltbesiedler
Achso ok.

"Wenn wir den Zeichenkettenliteral zu einem “raw”-String machen, wird \n nicht in einen Zeilenumbruch umgewandelt; auch der Backslash am Ende und das Zeilenumbruch-Zeichen im Quellcode sind Teil der Zeichenkette. Das Beispiel:"

Code: Alles auswählen

hello = r"Dies ist eine ziemlich lange Zeichenkette,\n\
die mehrere Zeilen Text enthält und wie man sie auch in C schreiben würde."

print(hello)

Das wird auch im Tutorial beschrieben, bei mir kommt dann aber die Fehlermeldung:

SyntaxError: Non-ASCII character '\xe4' on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 18:07
von Weltbesiedler

Code: Alles auswählen

'str' 'ing'             #Das ist ok
'string'
>>> 'str'.strip() + 'ing'   #Das ist ok
'string'
>>> 'str'.strip() 'ing'     #Das ist ungültig
 File "<stdin>", line 1, in ?
   'str'.strip() 'ing'
                     ^
SyntaxError: invalid syntax
Hier wird z.B. etwas gezeigt, das noch gar nicht erklärt wurde:

was ist das .strip() ?

Edit:

"Zeichenketten können indiziert werden, wobei das erste Zeichen einer Zeichenkette wie in C den Index 0 hat (“nullbasierte Zählung”). Es gibt keinen speziellen Zeichentyp (wie char in C) — ein Zeichen ist einfach eine Zeichenkette der Länge eins. Wie in der Programmiersprache Icon können Teile einer Zeichenkette mittels Slice-Notation (Ausschnittschreibweise) festgelegt werden. Angegeben werden zwei Indizes getrennt durch einen Doppelpunkt (:)."

Code: Alles auswählen

>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
Was sind Indizes?

In dem Fall ist

Code: Alles auswählen

word = 'Help' + 'A'
Schreibt er dann immer im ersten Fall mit

Code: Alles auswählen

word [4]
den vierten Buchstaben?
Und bei

Code: Alles auswählen

word[0:2]
den nullten (ersten) und den zweiten?

Edit: Und warum kommt bei

Code: Alles auswählen

word [1:2:4]
>>> 'e'

raus?

Und nicht der erste (zweite?), dritte und vierte (fünfter) Buchstabe raus?

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 18:22
von gkuhl
Weltbesiedler hat geschrieben:was ist das .strip() ?

Code: Alles auswählen

>>> help(str.strip)
Was sind Indizes?
Die Mehrzahl von Index. Was ein Index ist, findest du selbst raus. Z.B. durch ausprobieren in der Python-Shell.

Re: Frage zum Python-Tutorial

Verfasst: Donnerstag 30. September 2010, 18:25
von cofi
Weltbesiedler hat geschrieben:SyntaxError: Non-ASCII character '\xe4' on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Das ist fuer Python 3 geschrieben, der Unterschied zwischen Python 2 und 3 ist u.a., dass in Python3 UTF-8 als Standardkodierung benutzt wird - aber das fuehrt zu weit.
Weltbesiedler hat geschrieben:Hier wird z.B. etwas gezeigt, das noch gar nicht erklärt wurde:
Das Kapitel ist ein erster Durchgang, um zu zeigen, was denn alles so geht. Dabei hat der Abschnitt nur eine Funktion: Zu zeigen dass Literale und Ausdruecke sich nicht gleich verhalten (muessen).

Tu dir einen Gefallen und verwende ein Woerterbuch fuer Begriffe, die du nicht kennst. Index ist in dem Fall aequivalent zu Position.

'A' ist _nicht_ der 4. Buchstabe.