PyLotto

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Dienstag 24. Februar 2009, 23:48

derdons korrigierte Lösung ist richtig.
Ist ja eigentlich eine extrem einfache Methode n über k zu berechnen.

Edit:Wenn man sich die Fakultäten aus n über k mal aufschreibt und dann kürzt kommt man genau auf derdons korrigierte Lösung.
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

Beitragvon Crackus » Mittwoch 25. Februar 2009, 06:30

>>> from __future__ import division
>>> (6/49) * (5/48) * (4/47) * (3/46) * (2/45) * (1/44)
7.1511238420185173e-08

das ist richtig
das heißt die warscheinlichkeit im lotto zu gewinnen beträgt 7.1511238420185173e-06%
und die warscheinlichkeit das du gewinnst liegt bei 1 / 13983815.999999998 also etwa 1/14mio

also meine rechnung war schon richtig und bei dem quelllcode kann man ne menge sparen
z.B. (ist mir gestern abend noch aufgefallen) mehrere male global
import timer ist in der version auch nicht nötig
noch ein bissl mehr muss weg bye
BlackJack

Beitragvon BlackJack » Mittwoch 25. Februar 2009, 08:07

@Crackus: Da sollte man sich *alle* ``global`` sparen, die durchnummerierten Namen durch eine geeignete Datenstruktur, zum Beispiel `list` ersetzen und diese ganzen Wiederholungen von nahezu identischem Quelltext durch (echte) Funktionen und Schleifen ersetzen.
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Re: naya

Beitragvon tordmor » Mittwoch 25. Februar 2009, 12:11

Crackus hat geschrieben:http://paste.pocoo.org/show/105246/


:shock: :shock:

Code: Alles auswählen

import random

population = range(1, 50)
target = (1, 2, 3, 4, 5, 6)
sample = None
count = 0

while sample != target:
    sample = tuple(sorted(random.sample(population, 6)))
    count += 1

print "Gotcha! (%d)" % count
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

okay das triffts perfekt

Beitragvon Crackus » Mittwoch 25. Februar 2009, 13:56

okay das passt ich kenne einige Befehle daraus noch nicht (lerne noch nicht solange python)
und wollte eigentlich nur durch ein Programm den random befehl vertiefen und deswegen ein "kleines" Programm geschrieben was lotto simuliert.
habe dass dann schnell in eine endlosschleife getan und fertig.
aber ich finde es sehr schön das leute nicht nur sagen das kann man verbessern (was mir auch hilft) sondern auch mal einen sauberen und sehr professionellen Code reinstellen
Vielen dank an tordmor

ich werde das Programm noch mit einem hash versehen und hochladen (kann leider kein C um den Hash zu machen :( sry)

Vielen dank für Vorschläge und Verbesserungen#

PS: Rekord liegt immer noch bei 1.900.000

Edit: Vieleicht kann hier irgendwer den kleinen abschnitt in C schreiben und mir die Source zuschicken???
Müsste ich es nur noch in den Pythoncode implentiert kriegen^^
Aber das schaffe ich!!! hoffe ich
ansonsten hätte ich ya ein sehr nettes Forum was mir hoffentlich helfen würde^^
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Re: okay das triffts perfekt

Beitragvon Trundle » Mittwoch 25. Februar 2009, 14:31

Crackus hat geschrieben:PS: Rekord liegt immer noch bei 1.900.000

Dann unterbiete ich das mal: Ein Versuch, Hash ist 23be5da22193ca74d2bf7c6a5322a0a6. Bin ich jetzt ein Glückspilz oder ein Spielverderber?
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 25. Februar 2009, 14:32

Hmm? Was soll denn der C-Abschnitt machen?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

Oo??

Beitragvon Crackus » Mittwoch 25. Februar 2009, 14:46

@ Trundle wie haste das gemacht???
habe ich i-wo den salt reingeschrieben?? kann man die *.so oder die *.exe dateien
entschlüsseln??

@Leonidas
hmm das programm sollte die variable count übernehmen salt dazu md5 hash daraus machen und das wieder ans pythonscript übergeben dann könnte man das script reinsetzen und ne mini C-File
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Oo??

Beitragvon Leonidas » Mittwoch 25. Februar 2009, 15:00

Crackus hat geschrieben: habe ich i-wo den salt reingeschrieben?? kann man die *.so oder die *.exe dateien
entschlüsseln??

Die Shared Objects sind unnötig, da das Executable statisch gelinkt ist und ja, dein Salt steht in der Datei drin und lässt sich mit einem Debugger auslesen.

Crackus hat geschrieben:hmm das programm sollte die variable count übernehmen salt dazu md5 hash daraus machen und das wieder ans pythonscript übergeben dann könnte man das script reinsetzen und ne mini C-File

Das hat genau das gleiche Problem wie dein erster Ansatz. Ist sogar noch einfacher weil das Executable viel überschauberer ist als dein 1,7 MB großer BLOB.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

py2exe

Beitragvon Trundle » Mittwoch 25. Februar 2009, 20:12

Es wurde schon desöfteren hier im Forum darauf hingewiesen, dass py2exe, PyInstaller etc. keinen Schutz bieten, sondern dafür gedacht sind, dass man Python-Skripte auf Maschinen ausführen kann, auf denen kein Python installiert ist. Also dachte ich mir, dass man das doch einmal demonstrieren könnte.

PyInstaller war neu für mich, ich hatte mich zuvor nur bereits einmal ausgiebig mit py2exe befasst, aber vom Grundprinzip arbeiten die alle gleich und unterscheiden sich eben in den Details. Der Versuch, die ausführbare Datei mit 7zip zu entpacken, schlug fehl, also ist es nicht einfach ein zip-Archiv, das an die exe (bestehend aus dem Bootstrapping-Code) gehängt wird. Also habe ich in den Code von PyInstaller geschaut, um zu sehen, wie dein Skript zum Ausführen vorbereitet wird und dann ausgeführt wird. Da ich mich nicht mit den tiefsten Interna von PyInstaller befassen wollte, habe ich mich dazu entschlossen, an den Code mit Hilfe eines Debuggers (gdb) zu gelangen, da ich mich damit nicht mit dem Entpacken befassen muss. Hilfreich dabei war, dass PyInstaller mit Debug-Informationen gebaut war, die PyInstaller-Version dazu zu erraten, war nicht weiter schwer. Es hat dann also einfach gereicht, einen Breakpoint auf "launch.c:854" zu setzen, dort wird nämlich das Skript dann ausgeführt (``PyRun_SimpleString(data)``) und man kann sich den Inhalt von `data` einfach ausgeben lassen, was in dem Fall dann einfach das Skript ist. Es ist also sogar extrem einfach, an den Hash zu kommen, man muss sich nicht einmal mit Bytecode herumschlagen.

Später, nach weiterer Betrachtung des PyInstaller-Codes, habe ich dann noch diesen Entpacker geschrieben, mit dem man sehr einfach an den Quelltext von deinem Skript kommt, ohne sich mit einem Debugger herumschlagen zu müssen oder die ausführbare Datei irgendwie ausführen zu müssen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Crackus
User
Beiträge: 24
Registriert: Donnerstag 19. Februar 2009, 09:59

krass

Beitragvon Crackus » Mittwoch 25. Februar 2009, 21:19

krass ich hab zwar nur die hälfte verstanden aber echt krass^^
okay das heißt wenn man etwas wirklich "geheim" halten will sollte man noch C lernen um Python optimal gebrauchen zu können (Java file also *.class kann man sich auch anschauen ((oder??)) )
naya C wollte ich mir so oder so mal anschauen
Gibt es noch eine andere möglichkeit pythonabschnitte zu verschlüsseln??
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Mittwoch 25. Februar 2009, 21:23

Warum möchtest du das machen? Es gab schon häufiger Diskussionen dazu hier im Forum (im Wiki gibt es auch eine Seite, die "Aufklärung betreibt"). Was gefällt dir an Open Source nicht? Denke mal darüber nach, wie du deine Zeit besser investieren kannst: Indem du dich fragst, wie man 1. Programme "verschlüsseln" kann oder 2. gute Programme schreiben kann, von denen viele andere Menschen profitieren können.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Re: krass

Beitragvon BlackVivi » Mittwoch 25. Februar 2009, 21:56

Crackus hat geschrieben:krass ich hab zwar nur die hälfte verstanden aber echt krass^^
okay das heißt wenn man etwas wirklich "geheim" halten will sollte man noch C lernen um Python optimal gebrauchen zu können (Java file also *.class kann man sich auch anschauen ((oder??)) )
naya C wollte ich mir so oder so mal anschauen
Gibt es noch eine andere möglichkeit pythonabschnitte zu verschlüsseln??
Selbst C lässt sich Deassemblieren... Damit wird zumindest ungefähr klar, was passiert. Nützen tuts dann nicht viel, aber wenn man etwas _wirklich_ erfahren will, kann man es so. Java lässt sich auch wieder Entschlüsseln, aber dann sind alle Kommentare und Variablennamen und sowas weg... Also relativ schwer dann zu verstehen. Ich halt das alles sowieso für nicht so sinnvoll...

Es ist besser, wenn alle von deinem Quellcode profitieren.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 25. Februar 2009, 22:00

Crackus: Das mit dem "verschluesseln" eines Programm ist ein prinzipielles Problem: Du kannst ein Programm nicht wirkungsvoll verschluesseln, da der Benutzer es zum Ausfuehren ja wieder entschluesseln muss.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 25. Februar 2009, 22:25

hendrikS hat geschrieben:@Cofi: Apropos Golf: Postings für n über k kleiner 54 Bytes sind natürlich wilkommen :)


Mit allem drum und dran? Eingabe und Ausgabe über stdin/stdout?
Oder nur eine Funktion noverk(n,k)?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder