HILFE!! Hausaufgabe/ zahlenrate programm!!
Wenn ich `void` angebe erwarte ich, dass Compiler für Plattformen, die einen Rückgabewert auswerten, dort ein implizites EXIT_SUCCESS liefern. Sehe also kein Problem mit der plattformunabhängigkeit, aber ein paar gesparte Bytes. Bei einem PET mit 8 KiB RAM wird das schon ein wenig eng.
- sebastinas
- User
- Beiträge: 7
- Registriert: Mittwoch 7. Januar 2009, 20:29
Und das ist einfach falsch. Wenn dort kein int steht, ist es implementation-defined. Dein Programm baut dann unter Umständen auf einer Platform gar nicht. Außerdem geht es nicht darum, was du vom Compiler erwartest, sondern er bzw. der Standard von dir. Und dann ist die einzige portable Möglichkeit eben ``int main``.BlackJack hat geschrieben:Wenn ich `void` angebe erwarte ich, dass Compiler für Plattformen, die einen Rückgabewert auswerten, dort ein implizites EXIT_SUCCESS liefern. Sehe also kein Problem mit der plattformunabhängigkeit, aber ein paar gesparte Bytes. Bei einem PET mit 8 KiB RAM wird das schon ein wenig eng.
Wie wärs mit ner Runde Golf?
Biete zum Auftakt 100 Zeichen:
Das geht auf jeden Fall noch kleiner...
MFG HerrHagen
Regeln:
Zufallszahl 0..100
Python 2.5
Output wie beim obigen Beispiel
Biete zum Auftakt 100 Zeichen:
Code: Alles auswählen
r=id(9)%101
while 1:
g=input()
if g==r:print"geschafft";break
print["zu klein","zu gross"][g>r]
MFG HerrHagen
Regeln:
Zufallszahl 0..100
Python 2.5
Output wie beim obigen Beispiel
Code: Alles auswählen
r=id(9)%101;a=1
while a:
g=input();a=g!=r;print["geschafft",["zu klein","zu gross"][g>r]][a]
92
Code: Alles auswählen
r=id(9)%101;a=1
while a:g=input();a=g!=r;print["geschafft",["zu klein","zu gross"][g>r]][a]
Was für ein Spaß! 90
Code: Alles auswählen
r=a=id(9)%101
while a:g=input();a=g!=r;print["geschafft",["zu klein","zu gross"][g>r]][a]
Mit 81 Antworten und ueber 2000 Aufrufen hat es unser Schueler mit seinem HALLO WELT Programm wirklich weit gebracht. Respekt!
Eine Frage zu der zuletzt vorgestellten Methode zur Generierung einer Zufallszahl.
Ich fuerchte, dass das nicht wirklich funktioniert. Bei 5 Programmtests wurde immer dieselbe Zahl gewählt ( 48 ). Nicht besonders zufällig???
Eine Frage zu der zuletzt vorgestellten Methode zur Generierung einer Zufallszahl.
Code: Alles auswählen
r=a=id(9)%101
@hendrikS: id() liefert die Memory Adresse eines Objektes zurück, durch Module 101 wird der Rest, der beim Teilen von <adresse> / 101 entsteht, zurückgeliefert, es entsteht also eine Zahl zwischen 0 und 100. Da der Interpreter int() Zahlen in einem bestimmten Bereich speichert, funktioniert das nur wenn der Interpreter jedesmal neu gestartet wird, damit "9" eine neue Adresse bekommt.
Bei mir kommt 11 raus...hendrikS hat geschrieben:Mit 81 Antworten und ueber 2000 Aufrufen hat es unser Schueler mit seinem HALLO WELT Programm wirklich weit gebracht. Respekt!
Eine Frage zu der zuletzt vorgestellten Methode zur Generierung einer Zufallszahl.Ich fuerchte, dass das nicht wirklich funktioniert. Bei 5 Programmtests wurde immer dieselbe Zahl gewählt ( 48 ). Nicht besonders zufällig???Code: Alles auswählen
r=a=id(9)%101
id gibt die Adresse im Speicher (zumindest bei cPython) zurück. Die ist unter normalen Umständen erstmal mehr oder weniger zufällig. Wenn du das Programm mehrfach hintereinander startest ohne das der Speicherbereich in der Zwischenzeit anderweitig belegt wurde, bekommst du vmtl. wieder die selbe Adresse und damit die gleiche "Zufallszahl" zugewiesen. Die Generierung von Zufallszahlen mit dieser Methode ist für eine vernünftige Anwendung natürlich Quatsch, dafür aber schön kurz .
Starte mal neu oder versuch anderweitig deinen Speicher umzuordnen. Es wird eine andere Zahl rauskommen.
MFG HerrHagen
@str1442: Selbst das ist nicht garantiert, da wir ja bei den meisten Rechnern von virtuellem Speicher reden und der ja sozusagen bei jedem Programmstart komplett leer ist, es also durchaus sein kann, dass das `int`-Exemplar 9 bei jedem Programmstart an der gleichen Adresse landet. Ausserdem würde ich erwarten, dass bei den meisten Architekturen Objekte an durch 2, 4, oder 16 teilbaren Adressen liegen werden. Das schränkt die Ratemöglichkeiten mindestens auf nur gerade Zahlen ein.
@sebastinas: Okay, dann ist es eben theoretisch unportabel. Praktisch ist mir noch kein C-Compiler untergekommen, der das nicht kompiliert.
@sebastinas: Okay, dann ist es eben theoretisch unportabel. Praktisch ist mir noch kein C-Compiler untergekommen, der das nicht kompiliert.
Nö. Geht trotzdem, es wird ja nicht die Adresse direkt verwendet:BlackJack hat geschrieben:Das schränkt die Ratemöglichkeiten mindestens auf nur gerade Zahlen ein.
Code: Alles auswählen
>>> 146556 % 101 # Adresse durch 4 teilbar
5
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Das wollte ich jetzt mal genauer wissen, 10.000 Zufallszahlen mit der id-Methode verteilten sich bei mir wie folt:
Das sieht auf den ersten Blick doch gar nicht so schlecht aus... Hat jemand Lust auf Statistik?
Hier der Code
Code: Alles auswählen
[100, 104, 113, 95, 77, 113, 101, 99, 91, 101, 94, 87, 94, 115, 123, 76, 97, 109, 111, 88, 103,
111, 107, 104, 95, 99, 107, 109, 97, 86, 102, 103, 103, 88, 91, 88, 96, 102, 95, 95, 102, 99,
106, 78, 124, 93, 108, 112, 98, 103, 84, 111, 97, 100, 89, 85, 109, 88, 105, 97, 113, 93, 99,
96, 92, 113, 96, 91, 109, 90, 108, 104, 73, 94, 89, 84, 88, 90, 107, 109, 91, 100, 96, 92, 84,
114, 97, 105, 103, 103, 100, 92, 99, 108, 99, 104, 111, 104, 99, 111, 93]
Hier der Code
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Folgendes hallo welt Programm:
10mal das Gleiche. Nicht brauchbar zur Generierung von Zufallszahlen.
Code: Alles auswählen
for i in range(10):print id(9)
Warum den das? Obwohl, der Python Interpreter alloziert afair Speicher in größeren, vermutlich aus einer geraden Anzahl von Bytes bestehenden, Grüppchen, die er dann verwaltet - deswegen?Ausserdem würde ich erwarten, dass bei den meisten Architekturen Objekte an durch 2, 4, oder 16 teilbaren Adressen liegen werden. Das schränkt die Ratemöglichkeiten mindestens auf nur gerade Zahlen ein.
@Rebecca sieht bei mir ähnlich aus
ADD:
@hendrikS: Ja, in der gleichen Session - man würde diese Methode vermutlich auch nicht produktiv benutzen (es sei denn man ist gesottener C Programmierer), aber für das "Golfspiel" war es eine nette Möglichkeit, zumindest halbwegs funktionierend Zufallszahlen zu generieren - auch wenn es da je nach Betriebssystem / Speicherverwaltung Einschränkungen geben könnte.
Zuletzt geändert von str1442 am Donnerstag 8. Januar 2009, 15:08, insgesamt 1-mal geändert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Na das wurde hier doch nun zur Genüge abgehandelt ... str1442 hat Dir sogar explizit geantwortet!hendrikS hat geschrieben:Folgendes hallo welt Programm:10mal das Gleiche. Nicht brauchbar zur Generierung von Zufallszahlen.Code: Alles auswählen
for i in range(10):print id(9)
Das musste ja soweit kommen...Hat jemand Lust auf Statistik? :Wink:
Code: Alles auswählen
Z = [100, 104, 113, 95, 77, 113, 101, 99, 91, 101, 94, 87, 94, 115, 123, 76, 97, 109, 111, 88, 103,
111, 107, 104, 95, 99, 107, 109, 97, 86, 102, 103, 103, 88, 91, 88, 96, 102, 95, 95, 102, 99,
106, 78, 124, 93, 108, 112, 98, 103, 84, 111, 97, 100, 89, 85, 109, 88, 105, 97, 113, 93, 99,
96, 92, 113, 96, 91, 109, 90, 108, 104, 73, 94, 89, 84, 88, 90, 107, 109, 91, 100, 96, 92, 84,
114, 97, 105, 103, 103, 100, 92, 99, 108, 99, 104, 111, 104, 99, 111, 93]
n = float(sum(Z))
r = float(len(Z))
print sum([((z-(n/r))**2)/(n/r) for z in Z])
http://psydok.sulb.uni-saarland.de/voll ... at/chi.htm
Ergibt eine Testgröße von T=97.55 für den Chi-Quadrat-Test.
Das ergibt ein Signifikanzniveau von 55,05% für die Nichtablehnung der Gleichverteilung.
Nich sooo toll... oder hab ich mich vertan? *lange_nicht_gemacht* *hust*
Hast du die letzten Beiträge gelesen? Und verstanden?hendrikS hat geschrieben:Folgendes hallo welt Programm:10mal das Gleiche. Nicht brauchbar zur Generierung von Zufallszahlen.Code: Alles auswählen
for i in range(10):print id(9)
Natürlich kommt so 10x das gleiche heraus. Du musst das Programm NEU STARTEN. Dann kommt - wenn du nicht gerade Pech hast - eine andere Zahl heraus ...
Edit: Ups, hatte die letzte Seite des Threads noch nicht entdeckt ... hatte sich schon erledigt.
Ich hatte schon alles dazu gelesen. Hatte mich nur gefragt wie rebecca Ihre 10000 Zahlen generiert hat. Wahrscheinlich nicht durch 10000 einzelne Aufrufe. Aber auch bei jedem einzelnen Aufruf ist es immer gleich.
Thema ist fuer mich erledigt.
Thema ist fuer mich erledigt.