Seite 13 von 14

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 07:32
von webspider
Eben darauf wollte ich hinaus, man kann es problemlos weglassen. Sollte es nicht gehen, dann ist es ein Zeichen, dass der Code umgeschrieben werden sollte.

Was den Import von Modulen angeht: Vielleicht ist es ja ein Warnzeichen das Buch in die Tonne zu kloppen. Ein Import bringt einem nichts wenn keiner der importierten Namen verwendet wird[1], man kann problemlos (außer bei Sternchenimporten) die Datei danach durchsuchen und so feststellen ob er verwendet wird oder nicht[2].

[1]: Ausnahme sind Importe die mit Nebeneffekten behaftet sind, hatte da mal ein interessantes Zusammenspiel von logging und requests, da requests die Präsenz von logging als Grund auffasste bei jedem Request ausführlich zu schwafeln. Das Setzen des Logging-Levels hat den Spuk beendet.

[2]: Dies wird von PyLint und PyFlakes und dergleichen ausgenutzt, Werkzeugen die deinen Code auf übliche Schnitzer überprüfen ehe du ihn ausführst.

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 14:21
von Tengel

Code: Alles auswählen

def rot13(wort, zahl):
    
    neu = []
    x = len(wort)
    i = 0
    for i in range(0,x,1):
        
        rotiert = ord(wort[i]) + zahl
        print(chr(rotiert))
       
        neu.append(rotiert)
        print(rotiert)


    neu2 = []
    x= 0
    for x in range (0,len(neu),1):
        rotiert = chr(neu[x])
        neu2.append(rotiert)
        
        return neu2

    
Wieso wird in der zweiten Schleife nur der erste String in die Liste gespeichert?

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 14:28
von anogayales
Weil das "return neu2" in der Schleife steht. Außerdem solltest du aussagekräftigere Namen wählen. Und in python kann man direkt über Listen iterieren, dazu brauchst du dann das range und [x] Zeug nicht:

Code: Alles auswählen

for element in neu:
    neu2.append(chr(element))
return neu2
Und wenn du mal range benutzen solltest musst du nicht unbedingt vorher das x definieren. Das macht nur manchmal Sinn, wenn du leere Listen hast und du später was mit dem x außerhalb der Schleife anfangen willst.

Grüße,
anogayales

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 14:31
von Tengel
Das mit dem return hab ich auch gerade gemerkt - das mit der kurzschreibweise war mir nicht klar - thx.

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 14:36
von xeike
Hi Tengel,

kennst du str.translate() schon?

Grüße

Xe

Re: Neuling sucht Rat

Verfasst: Montag 22. April 2013, 14:47
von Tengel
Nein - danke für den Hinweis.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 04:28
von Tengel
Bin gerade im Kapitel über Dateien lesen/schreiben
Da geht es auch um das Modul os und den md5 Wert

Laut Buch

Code: Alles auswählen

dateiname ="Wortliste.txt"
cmd = "md5sum"+dateiname
fp = os.popen(cmd)
res = fp.read()
stat = fp.close()
print(res)

Unabhängig davon - das ich meine gelesen zu haben das read() bei größeren Dateien nicht richtig arbeitet und man deshalb die Zeilen einzeln auslesen sollte - funktioniert das nicht - das print gibt nur eine leere Zeile aus.

google verweist auf
http://openbook.galileocomputing.de/pyt ... 15_004.htm
das führt bei mir jedoch lediglich zu

Code: Alles auswählen

m = hashlib.md5("Hallo Welt")
Traceback (most recent call last):
  File "<pyshell#140>", line 1, in <module>
    m = hashlib.md5("Hallo Welt")
TypeError: Unicode-objects must be encoded before hashing
Was mach ich falsch?

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 06:24
von Sirius3
Hallo Tengel,
die Funktionen in »os« greifen ziemlich direkt auf Betriebssystemfunktionen zurück. Je nachdem was für ein Device an das Filehandle »fd« gebunden ist, kann »read« verschieden arbeiten, tut das aber immer, nach Spezifikation, richtig. Das heißt aber nicht, dass immer bis ganz zu Ende gelesen wird, auch weil es manchmal auch gar kein Ende gibt.
Dein Programm ist ein schönes Beispiel, warum man popen nicht benutzen sollte, sondern immer die höheren Funktionen aus subprocess:

Code: Alles auswählen

import subprocess
res = subprocess.Popen(['md5sum', dateiname], stdout=subprocess.PIPE).communicate()[0]
Bei Dir fehlt ein Leerzeichen.

Den Fehler bei Verwendung von »hashlib« solltest Du inzwischen selbst beheben können, da einige Kapitel zuvor sicher schon Unicode-Strings und Bytes behandelt wurden.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 19:11
von Tengel
Im Buch gibt der Autor nur an das popen eigentlich veraltet ist - aber da subprocess um einiges komplizierter sei - würde er solange das modul verwenden bis es gelöscht wird.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 19:42
von webspider
Die offizielle Dokumentation hat praktischerweise am Ende der passenden Seite Praxis-Beispiele wie man übliche Verwendung von os und popen ersetzt.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 22:34
von snafu
Tengel hat geschrieben:Im Buch gibt der Autor nur an das popen eigentlich veraltet ist - aber da subprocess um einiges komplizierter sei - würde er solange das modul verwenden bis es gelöscht wird.
Damit gibt der Autor ganz schönen Blödsinn von sich, finde ich.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 22:38
von Tengel
Welche Entwicklungsumgebung nutzt ihr eigentlich so?

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 23:20
von BlackJack
@Tengel: Texteditor und IPython zum „live” ausprobieren.

Re: Neuling sucht Rat

Verfasst: Dienstag 23. April 2013, 23:50
von Tengel
Texteditor oO - das ja wohl für die ganz harten

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 00:13
von snafu
Tengel hat geschrieben:Texteditor oO - das ja wohl für die ganz harten
Nee, das ist tatsächlich das Tool, welches wohl die meisten Python-Programmierer benutzen, da bei Python einfach keine IDE nötig ist.

Um's vielleicht etwas deutlicher machen: Würdest du für die Programmierung von Shell-Skripten (je nach Betriebssystem meist *.bat bzw *.sh Dateien) auch direkt eine IDE anwerfen (schließlich sind es ja *Programme*)? :)

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 02:33
von Tengel
Mit dem Modul webbrower kann man ja z. B. den Standartbrower öffnen
Gibt es auch ein Modul mit dem man Programme(WinAmp) oder Ordner öffnen kann?

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 05:47
von snafu
Meinst du damit das automatische Starten von dem Programm, das der jeweiligen Dateiendung zugeordnet ist? Dafür gibt es (allerdings nur für Windows) os.startfile().

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 05:59
von Tengel
Ja ich denke das mein ich^^ muss mal rumprobieren.

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 10:35
von Leonidas
Unter Unices kann man ``xdg-open`` verwenden, sofern installiert. Wenn nicht installiert gibts eh eher keine Standardzuordnungen (außer evtl. ``$EDITOR``)

Re: Neuling sucht Rat

Verfasst: Mittwoch 24. April 2013, 20:45
von Tengel
Bin momentan dabei mein Traffic Programm so zu schreiben das eine GUI Klasse verwendet wird - ..klappt leider nicht so recht, hat jemand einen "guten" Link wo Schnittstellen von Klassen erklärt werden?

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Phyton\lib\tkinter\__init__.py", line 1442, in __call__
    return self.func(*args)
  File "D:/Phyton/trafficklasse/tr.py", line 20, in standAnzeigen
    anzeige["text"] = "Der momentane Verbrauch liegt bei "+str(self.startWert)+" mb."
TypeError: 'NoneType' object does not support item assignment

Ich würd mal vermuten das liegt daran das die Objekte der Klassen nicht miteinander "kommunizieren" können.