Seite 1 von 1

Ideenlos :D

Verfasst: Montag 3. Juli 2006, 19:09
von CrackPod
Hallo,

naja wenns hier um Ideen geht, dann glaub ich kann ich das hier auch posten :D
Also: Ich hab derzeitig keine Ideen, was ich programmieren könnte. Da ich mich aber richtig in Python reinarbeiten will, wollt ich mal fragen, ob mir jemand ein paar Sachen sagen kann, die ich proggen kann.
Aber bitte nich alzu schwere Dinge :wink:

Danke
Greetz

Ideen????

Verfasst: Montag 3. Juli 2006, 19:31
von Andy
Hallo CrackPod,

zugegeben, vor dieser Frage stehe ich auch manchmal.
Ganz zum Anfang, weiß man natürlich erst recht nicht so richtig. :roll:

Es kommt so´n bischl auf die Verwendbarkeit in Deinem Interessengebiet an.

- Wozu willst Du proggen?
- Was musst Du können, damit Du später mal.....
- und vor allem wie: Konsole, GUI Tk...wxpython.....

Wie wär´s mit`nen Taschenrechner, Kalender, Uhr :?:
gruss andy

Re: Ideenlos :D

Verfasst: Montag 3. Juli 2006, 19:35
von Leonidas
CrackPod hat geschrieben:Da ich mich aber richtig in Python reinarbeiten will, wollt ich mal fragen, ob mir jemand ein paar Sachen sagen kann, die ich proggen kann.
Klar: Vorschläge.

Verfasst: Montag 3. Juli 2006, 19:58
von CrackPod
Also mit Pygame hab ich mich noch nich befasst. Also is das turtle Spiel weg.
http://svn.projectdream.org/people/mkub ... ets/trunk/ <--geht nich :D ich seh zumindest nix
Und das mit dem Radio wird mir zu kompliziert sein.

Naja am anfang würd ich eher viel Konsole machen. Is 1. irgendwie cooler :D Und wenn ich dann das GUI mäßiges will, dann is das ja keine große Umstellung. Da muss doch dann nur noch das GUI geschrieben werden oder? (is zumindest bei Java so^^)
Kalender hört sich nich schlecht an. Nur eines wär sicher praktisch: Ein gutes, klar strukturiertes Manual. Aber sollte auf deutsch sein. Zumin teilweise, da ich mich bei Programmier Manuals irgendwie immer schwer tu^^

Verfasst: Montag 3. Juli 2006, 20:09
von Valnar
Also das erste was ich gemacht habe ist ein Verschlüsselungsprogramm in der Caesar-Art.

Hat zimlich gut geklappt...

Wenn du willst kannste bei meinen project mithelfen XD

Verfasst: Montag 3. Juli 2006, 20:13
von CrackPod
Wenns ne dumme Frage is: Tut mir Leid, aber was is die Caesar-Art?

Was is dein Projekt? V.a. wie schwer isses?
Und eine Deutsche Dokumentation gibts nich? Irgendwie postet nämlich keiner eine xD Google spuckt auch nich wirklich was aus :'(

Verfasst: Montag 3. Juli 2006, 20:24
von Valnar
Also dei Caesar-Verschlüsselung ist wie gesagt von Caesar erfunden worden.

Dabei ist das alphabet um 4 Buchstaben verschoben.
Also:
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A,B,C,D

Danach kann man mit schwereren verschlüsselugnen herumprobieren...

Verfasst: Montag 3. Juli 2006, 21:54
von Leonidas
CrackPod hat geschrieben:http://svn.projectdream.org/people/mkub ... ets/trunk/ <--geht nich :D ich seh zumindest nix
Also ich seh da durchaus was.
CrackPod hat geschrieben:Und das mit dem Radio wird mir zu kompliziert sein.
Glaube ich nicht. Parser zu erstellen ist sehr einfach, darauf habe ich Wert gelegt. Beispiel.

Wie du meinst.

Re: Ideenlos :D

Verfasst: Montag 3. Juli 2006, 22:05
von gerold
CrackPod hat geschrieben:Aber bitte nich alzu schwere Dinge :wink:
Hi CrackPod!

Wie wärs mit einer Adressendatenbank. Als Basis SQLite. Lokale Einstellungen in eine INI-Datei (mit ConfigParser). Einfachste Textoberfläche. Kommandozeilenparameter mit "optparse"

Code: Alles auswählen

>>> adressdb --search-lastname="*enz*"
2 addresses found:
- 1 Gerold P*enz*
- 2 Bernhard P*enz*
Select address: 2
...
...
Dann die Textoberfläche mit "gettext" internationalisieren.

Dann eine wxPython-Oberfläche zum Eingeben und Abfragen der Adressen. Einfache Suche nach Teilen der Adresse ermöglichen. Liste der Adressen. Sortierbare Liste. Wieder mit gettext internationalisieren.

Mit dem ReportManager http://reportman.sourceforge.net/ die Daten der Datenbank in Berichtsform ausdrucken lassen. Über das Kommandozeilentool -- das genügt. Man muss ja nicht alles in Python einbinden.

Übergabe der Adressdaten in die Zwischenablage, damit diese in anderen Programmen verwendet werden kann. Cut & Paste, Drag & Drop.

Serienbriefe mit den Adressen über OpenOffice.

Export der Adressen. Import der Adressen.

Mit den Adressen Zusatzinformationen verwalten:
- Wann hat wer mit wem zuletzt gesprochen? Was wurde ausgemacht?
- Wer hat wann mit wem einen Termin? Wann sollte man sich bei wem melden?

Wenn man bei so einem Beispiel nichts lernt, dann esse ich einen Besen samt Putzfrau. :-)

mfg
Gerold
:-)

Verfasst: Montag 3. Juli 2006, 22:11
von Valnar
Also wie gesagt man KANN mir auch bei meinen Project helfen.

Wird ein textadventure und diue Story is aufm Blatt + 3 verscheidene Enden!!! Wird wohl auch nicht so schwer werden da ich auch ein anfänger bin ;)

Wenn ihr wollt erstell ich ein extra thread. (ob ich das weert bin XD )

Verfasst: Montag 3. Juli 2006, 22:13
von CrackPod
Valnar hat geschrieben:Also dei Caesar-Verschlüsselung ist wie gesagt von Caesar erfunden worden.

Dabei ist das alphabet um 4 Buchstaben verschoben.
Also:
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A,B,C,D

Danach kann man mit schwereren verschlüsselugnen herumprobieren...
Also die Caesar-Verschlüsselung hab ich nich gemacht.
Aber ne andere. Is allerdings noch sehr ausbaubedüftig :D

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random

def decode(s):
    expRandInt = random.randint(1,5)
    addRandInt = random.randint(1,50)
    #print 'exp',expRandInt
    #print 'add',addRandInt
    tempStr = []
    decode = []
    for i in s:
        tempStr.append(i)
    for i in tempStr:
        i = (ord(i))+addRandInt
        i = i*(addRandInt * expRandInt)
        decode.append(i)
    decode.append(addRandInt)
    decode.append(expRandInt)
    return decode

def encode(s):
    expRandInt = s[-1]
    addRandInt = s[-2]
    del s[-1]
    del s[-1]
    #print 'exp',expRandInt
    #print 'add',addRandInt
    tempStr = []
    encode = []
    for i in s:
        tempStr.append(i)
    for i in tempStr:
        i = (i/(addRandInt * expRandInt)) - addRandInt
        #print i
        i = chr(i)
        encode.append(i)
    s = ''.join(encode)
    return s

#Test beginnt hier:#
print 'SimpleEncode: Ein String wird in die ASCII Zahlen umgewandelt,
danach mit einer Zufallszahl addiert, danach malgenommen mit dem Produkt von 2 Zufallszahlen. Danach wird er wieder zurückgewandelt.'
decoded = decode('string')
print decoded
print encode(decoded)
print '--------------'
print encode(decode('string'))
Für die anderen: Danke für die Vorschläge
Trotzdem seh ich bei dem Link irgendwie nix :D

Verfasst: Montag 3. Juli 2006, 22:16
von Valnar
also mein quelltext is ungefähr halbsolang o0

Ich werde den morgen mal hier rienschreiben ;)

Verfasst: Montag 3. Juli 2006, 23:01
von BlackJack
CrackPod hat geschrieben:Also die Caesar-Verschlüsselung hab ich nich gemacht.
Aber ne andere. Is allerdings noch sehr ausbaubedüftig :D
Einiges ist auch ein kleines bischen umständlich gelöst. Das lässt sich vereinfachen.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random

def decode(s):
    expRandInt = random.randint(1,5)
    addRandInt = random.randint(1,50)
    #print 'exp',expRandInt
    #print 'add',addRandInt
    tempStr = []
    decode = []
    for i in s:
        tempStr.append(i)
    for i in tempStr:
        i = (ord(i))+addRandInt
        i = i*(addRandInt * expRandInt)
        decode.append(i)
    decode.append(addRandInt)
    decode.append(expRandInt)
    return decode
`tempStr` ist unnötig und die Art wie Du die Kopie erzeugst ist etwas umständlich. ``tempStr = list(s)`` hätte ausgereicht.

Das Du `i` in der Schleife erst an eine Zeichenkette und im Rumpf dann an eine Zahl bindest ist ein wenig unsauber.

Code: Alles auswählen

def encode(s):
    expRandInt = s[-1]
    addRandInt = s[-2]
    del s[-1]
    del s[-1]
    #print 'exp',expRandInt
    #print 'add',addRandInt
    tempStr = []
    encode = []
    for i in s:
        tempStr.append(i)
    for i in tempStr:
        i = (i/(addRandInt * expRandInt)) - addRandInt
        #print i
        i = chr(i)
        encode.append(i)
    s = ''.join(encode)
    return s
Die ersten vier Zeilen bekommt man auf zwei, wenn man die `pop()` Methode benutzt. Für `tempStr` gilt das gleiche wie oben.

Code: Alles auswählen

def decode(string):
    add_number = random.randint(1, 50)
    mult_number = random.randint(1, 5)
    pre_multiplied = add_number * mult_number
    result = [(ord(c) + add_number) * pre_multiplied for c in string]
    result.extend((add_number, mult_number))
    return result

def encode(data):
    mult_number = data.pop()
    add_number = data.pop()
    pre_multiplied = add_number * mult_number
    return ''.join(chr(i // pre_multiplied - add_number) for i in data)
Trotzdem seh ich bei dem Link irgendwie nix :D
Ich auch nicht. Man muss einen Browser benutzen, der mit XML und XSLT Stylesheets etwas anfangen kann.

Verfasst: Dienstag 4. Juli 2006, 05:56
von CrackPod
hm, also kopete tuts schonmal nich :D
Welcher kann das?

Verfasst: Dienstag 4. Juli 2006, 06:04
von CrackPod
BlackJack hat geschrieben:Einiges ist auch ein kleines bischen umständlich gelöst. Das lässt sich vereinfachen.
Dacht ich mir schon :D
BlackJack hat geschrieben:Die ersten vier Zeilen bekommt man auf zwei, wenn man die `pop()` Methode benutzt.
Bei pop wusst ich nich, was ich übergeben soll, damit er den letzten Eintrag nimmt.

Code: Alles auswählen

result = [(ord(c) + add_number) * pre_multiplied for c in string]
Ach so ging das ^^ Ich das for .. in am Anfang des Codes geschrieben und Syntaxerror bekommen :D

Code: Alles auswählen

return ''.join(chr(i // pre_multiplied - add_number) for i in data)
Fehlen da nich die []? Wenn nich warum? Is ja trotzdem ne Iteration, auch wenn sie in ner Funktion aufgerufen wird oder seh ich da was falsch?
extend is die neuere Version von append kann das sein?

Verfasst: Dienstag 4. Juli 2006, 08:50
von BlackJack
CrackPod hat geschrieben:
BlackJack hat geschrieben:Die ersten vier Zeilen bekommt man auf zwei, wenn man die `pop()` Methode benutzt.
Bei pop wusst ich nich, was ich übergeben soll, damit er den letzten Eintrag nimmt.
Wenn nichts angegeben wird, dann ist der letzte die Voreinstellung. Ansonsten hätte man auch, wie beim Index, eine -1 nehmen können.

Code: Alles auswählen

In [16]: list.pop?
Type:           method_descriptor
Base Class:     <type 'method_descriptor'>
String Form:    <method 'pop' of 'list' objects>
Namespace:      Python builtin
Docstring:
    L.pop([index]) -> item -- remove and return item at index (default last)


In [17]: [1, 2, 3].pop(-1)
Out[17]: 3

Code: Alles auswählen

return ''.join(chr(i // pre_multiplied - add_number) for i in data)
Fehlen da nich die []? Wenn nich warum? Is ja trotzdem ne Iteration, auch wenn sie in ner Funktion aufgerufen wird oder seh ich da was falsch?
Die eckigen Klammern fehlen nicht, da es keine list comprehension sondern eine generator expression ist. Ist im Grunde das gleiche nur das eben keine Liste als Ergebnis rauskommt, sondern ein Iterator. So eine generator expression muss man in runde Klammern setzen, es sei denn sie ist sowie so schon in runde Klammern eingeschlossen, wie z.B. bei einem Funktionsaufruf.

Code: Alles auswählen

In [18]: a = [x**2 for x in (0, 1, 2, 3)]

In [19]: a
Out[19]: [0, 1, 4, 9]

In [20]: b = (x**2 for x in (0, 1, 2, 3))

In [21]: b
Out[21]: <generator object at 0xb7bea0ac>

In [22]: b.next()
Out[22]: 0

In [23]: b.next()
Out[23]: 1

In [24]: b.next()
Out[24]: 4

In [25]: b.next()
Out[25]: 9

In [26]: b.next()
---------------------------------------------------------------------------
exceptions.StopIteration    Traceback (most recent call last)

/home/marc/<ipython console>

StopIteration:
Der Vorteil von genexps ist, das nicht erst eine Liste mit allen Ergebnissen erzeugt wird, sondern das man die einzelnen Ergebnisse dann erzeugen lassen kann, wenn man sie braucht.
extend is die neuere Version von append kann das sein?
Nein, die beiden Methoden machen etwas unterschiedliches. `append()` hängt ein Objekt an eine Liste an und `extend()` nimmt ein iterierbares Objekt entgegen und erweitert die Liste um dessen Inhalt.

Code: Alles auswählen

In [29]: a = [1, 2]

In [30]: a.append([3, 4])

In [31]: a
Out[31]: [1, 2, [3, 4]]

In [32]: b = [1, 2]

In [33]: b.extend([3, 4])

In [34]: b
Out[34]: [1, 2, 3, 4]

Verfasst: Dienstag 4. Juli 2006, 09:40
von Valnar
Oh man gitb es ein Wörterbuch Deutsch pythonisch - Pythonisch -Deutshc?

Als N00b versteh man manchmal goarneichts! :P

Verfasst: Dienstag 4. Juli 2006, 12:38
von CrackPod
naja, ich verstehs schon, einige Wörter sind neu, werden aber durch die Erklärung klar...

Wo is der Unterschied zu ner Liste und einem Iterator?
Ich mein auf einen String kann man ja auch per s[x] zugreifen. also is das doch auch eine Liste?!
Und noch was: Wie erzeugst du diese Wunderbaren ausgaben? Die taugen mir ziemlich :D Die schreibst du nich selber oder?!

Verfasst: Dienstag 4. Juli 2006, 13:48
von BlackJack
@Valnar:

Das meiste wird im Tutorial behandelt. Auf deutsch wird sich einiges im Wiki ([wiki])[/wiki]finden lassen.

@CrackPod:

Bei einer Liste kannst Du auf jedes Element jederzeit zugreifen. Ein Iterator ist ein Objekt mit einer `next()` Methode die immer jeweils das nächste Element zurückgibt.

Wenn ein Objekt den Zugriff auf einzelne Elemente über einen Index in eckigen Klammern unterstützt und mit ``len(obj)`` die Anzahl der enthaltenen Elemente liefert, dann spricht man von einer "Sequenz" oder einem Objekt, das das Sequenzprotokoll versteht. Davon gibt's eine ganze Menge, zum Beispiel Listen, Tupel, Zeichenketten, `array.array` usw. und man kann sich auch eigene Objekte dieser Art erschaffen indem man die Methoden `__len__()`, `__getitem__()` und `__setitem__()` geeignet implementiert. Letzteres nur wenn man mit `obj[x] = y` auch Zuweisungen erlauben möchte.

Ich benutze ipython als interaktive Python-Shell. Da kommen die `In`/`Out` Ausgaben her.

Verfasst: Mittwoch 5. Juli 2006, 09:43
von Valnar
Ja die meisten aber nicht alle...