HILFE!! Hausaufgabe/ zahlenrate programm!!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Beitragvon BlackJack » Donnerstag 8. Januar 2009, 01:08

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. ;-)
Benutzeravatar
sebastinas
User
Beiträge: 7
Registriert: Mittwoch 7. Januar 2009, 20:29

Beitragvon sebastinas » Donnerstag 8. Januar 2009, 08:29

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. ;-)


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``.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 10:47

Wie wärs mit ner Runde Golf? :D
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]

Das geht auf jeden Fall noch kleiner...

MFG HerrHagen

Regeln:
Zufallszahl 0..100
Python 2.5
Output wie beim obigen Beispiel
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Donnerstag 8. Januar 2009, 12:04

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]


94 oO
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 12:17

92 :lol:

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]
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 12:31

Was für ein Spaß! 90 8)

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]
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Donnerstag 8. Januar 2009, 12:37

Das funktioniert aber nicht wenn die Pseudozufallszahl 0 ist, sonst hätt ich gleich while r+1 und if g==r: r = -1 benutzt :P
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Donnerstag 8. Januar 2009, 13:26

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.

Code: Alles auswählen

r=a=id(9)%101


Ich fuerchte, dass das nicht wirklich funktioniert. Bei 5 Programmtests wurde immer dieselbe Zahl gewählt ( 48 ). Nicht besonders zufällig???
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 13:28

Stimmt. Denkfehler, ich dachte a wird die id zugewiesen...
Readability counts. :wink:
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Donnerstag 8. Januar 2009, 13:34

@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.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 13:48

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.

Code: Alles auswählen

r=a=id(9)%101


Ich fuerchte, dass das nicht wirklich funktioniert. Bei 5 Programmtests wurde immer dieselbe Zahl gewählt ( 48 ). Nicht besonders zufällig???


Bei mir kommt 11 raus... :wink:
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 :wink:.
Starte mal neu oder versuch anderweitig deinen Speicher umzuordnen. Es wird eine andere Zahl rauskommen.

MFG HerrHagen
BlackJack

Beitragvon BlackJack » Donnerstag 8. Januar 2009, 13:56

@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.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Donnerstag 8. Januar 2009, 14:01

BlackJack hat geschrieben:Das schränkt die Ratemöglichkeiten mindestens auf nur gerade Zahlen ein.


Nö. Geht trotzdem, es wird ja nicht die Adresse direkt verwendet:

Code: Alles auswählen

>>> 146556 % 101  # Adresse durch 4 teilbar
5
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Donnerstag 8. Januar 2009, 14:23

Das wollte ich jetzt mal genauer wissen, 10.000 Zufallszahlen mit der id-Methode verteilten sich bei mir wie folt:

[code=]
[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][/code]

Das sieht auf den ersten Blick doch gar nicht so schlecht aus... Hat jemand Lust auf Statistik? :wink:

Hier der Code
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Beitragvon hendrikS » Donnerstag 8. Januar 2009, 15:01

Folgendes hallo welt Programm:

Code: Alles auswählen

for i in range(10):print id(9)

10mal das Gleiche. Nicht brauchbar zur Generierung von Zufallszahlen.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder