Programmerstellung

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.
Antworten
Philly
User
Beiträge: 1
Registriert: Sonntag 30. September 2007, 17:17

hallo ich bentöige etwas hilfe.
ich muss ein programm erstellen. die aufgabe dazu lautet wie folgt:
erstellt ein programm, bei dem der computer mittels simulationen aus 10000 zufällig zusammengestellten gleichgrossen personengruppen bestimmt, wie gross die wahrscheinlichkeit des auftretens von "geburtstagszwillingen" ist.
testet euer programm für gruppengrpssen von 15, 30 und 40 personen.

mein bisher erstelltes programm behinaltet wohl einen fehler. allerdings kann ich ihn nicht finden.
mein bisher erstelltes programm:

Code: Alles auswählen

from whrandom import*
anzahl=input ('Gruppengröße? ')
er=0
def wiederholen():
      global er
      liste[0]*366
      zw=0
      for zz in range(anhal):
           xx=randint(1,365)
      if liste[xx]=0;
      liste[xx]=1
      ausgabe='%5d'%xx
 else:
       ausgabe='%4d'%xx
       zw=1
       print ausgabe,
print
er=er+zw
wo ist mein fehler? ich brauche wirklich dringend hilfe! :cry:

vielen dank!

EDIT by mawe: code tags
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi Philly,

ohne mich jetzt mal mit deiner Programmlogik zu beschäftigen (hab gerade keine Lust :D),

Code: Alles auswählen

from whrandom import*
Gibt's whrandom überhaupt?
Die Sternchenimporte sind verpöhnt, besser

Code: Alles auswählen

import random
...
random.randint(...)
oder

Code: Alles auswählen

from random import randint
Und was isn das?

Code: Alles auswählen

if liste[xx]=0;
liste[xx]=1
Na ich seh grad, die Formatierung is ziemlich durcheinander.
Und ich sehr gerade dass wiederholen() nie aufgerufen wird :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo phil und willkommen im Forum,

Außerdem ist "liste" gar nicht definiert und so etwas

Code: Alles auswählen

liste[0]*366
ist eigentlich auch nicht sinnvoll.

Ich erinnere mich daran, daß ich eine Lösung für das Problem hier schon mal verlinkt habe. Aber das wirst Du so ohne weiteres nicht finden. Wenn wirklich alle Stricke reißen kann man ja mal darauf zurückkommen, bis dahin aber mal folgende Tipps - lediglich eine "Übersetzung" der Aufgabe, weil Du scheinbar damit schon ein Problem hast:

- Würfel "anzahl" Zahlen im Bereich [1,365]. (Du weißt wie man das in Python ausdrückt?)
- Stopfe diese Zahlen auch tatsächlich in eine Liste.
- Schaue nach ob irgendwelche Zahlen gleich sind und behalte die Zahl dieser Treffer.
- Wiederhole 10000-Mal
- Berechne den Anteil der Treffer (Vorsicht bei der Division von Ganzzahlen! Besser vorher eine Zahl in eine Fließkommazahl umwandeln.)

Wenn Du vorher noch einen Blick ins Tutorial wirfst, solltest Du das eigentlich schon schaffen. Nur Mut!

Gruß,
Christian
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

http://en.wikipedia.org/wiki/Birthday_paradox

Da gibt es elegantere Lösungen als Bruteforce ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das Problem wird oft genutzt, um einen Einführung in eine bestimmte Methode zu geben, die ich hier nicht nenne, um die Lösung nicht ganz vorweg zu nehmen. Die von Dir verlinkte analytische Lösungen entspricht schlichtweg nicht der Aufgabenstellung.

edit: Rechtschreibung
Zuletzt geändert von CM am Dienstag 2. Oktober 2007, 08:07, insgesamt 1-mal geändert.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

mawe hat geschrieben:

Code: Alles auswählen

from whrandom import*
Gibt's whrandom überhaupt?
Nicht mehr.
TUFKAB – the user formerly known as blackbird
lunar

veers hat geschrieben:http://en.wikipedia.org/wiki/Birthday_paradox

Da gibt es elegantere Lösungen als Bruteforce ;)
Nur wurde leider nicht nach diesen Lösungen gefragt ;)
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Was ganz wichtitges: Bei if Abfragen muss man statt '=' '==' schreiben. Das ist ja schließlich keine Zuweisung. Hast du vielleicht vorher in Delphi programmiert?
BlackJack

@CM: Deine Beschreibung eines Algorithmus scheint mir nicht ganz richtig, oder zumindest zu Aufwändig. Man muss ja nicht zählen wieviele Kollisionen es in einer Gruppe gibt, sondern nur feststellen ob überhaupt eine Kollision da ist.

Also ist der Ansatz den man im Quelltext im ersten Beitrag mit ein wenig gutem Willen erkennen kann gar nicht so schlecht nur solange Geburtstage zu wählen bis die erste Kollision auftritt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

CM hat geschrieben: - Schaue nach ob irgendwelche Zahlen gleich sind und behalte die Zahl dieser Treffer.
Ja, aber das habe ich doch da geschrieben? Nun gut, wenn man das falsch verstehen kann, ist es sicher richtig dies klar zu stellen ...
BlackJack

Aber genau das ist IMHO falsch. Der Schritt müsste lauten "Schaue nach ob es mindestens einen Tag mehrfach gibt". Wieviele das sind ist egal. Dein Schritt klingt für mich so als wenn [42, 42, 23, 23] zum Beispiel 2 ergibt (Anzahl) und nicht bloss "Ja, es gab Doppelte" oder "Nö, gibt keine Doppelten".
Antworten