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.
Neuling sucht Rat
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
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
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:
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
Code: Alles auswählen
for element in neu:
neu2.append(chr(element))
return neu2
Grüße,
anogayales
Bin gerade im Kapitel über Dateien lesen/schreiben
Da geht es auch um das Modul os und den md5 Wert
Laut Buch
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
Was mach ich falsch?
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)
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
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:
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.
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]
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.
Damit gibt der Autor ganz schönen Blödsinn von sich, finde ich.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.
Nee, das ist tatsächlich das Tool, welches wohl die meisten Python-Programmierer benutzen, da bei Python einfach keine IDE nötig ist.Tengel hat geschrieben:Texteditor oO - das ja wohl für die ganz harten
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*)?
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().
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Unter Unices kann man ``xdg-open`` verwenden, sofern installiert. Wenn nicht installiert gibts eh eher keine Standardzuordnungen (außer evtl. ``$EDITOR``)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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?
Ich würd mal vermuten das liegt daran das die Objekte der Klassen nicht miteinander "kommunizieren" können.
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