Kniffel programmieren?

3 Antworten

Und wo genau ist dein Problem?

Generell brauchst du ein paar Dinge, über die du dich Informeiren kannst/solltest. Die Dokumentation hilft hier z.B.

  • Ausgabe von Strings, Integern und Listen auf der Konsole
  • Schleifen
  • Listen
  • wie fülle ich eine Liste mit n Einträgen, die immer den gleichen Ablauf haben.
  • Generierung von zufälligen Integern zwischen den Integern a und b
  • Nutzereingabe lesen und auswerten - für jeden der Einträge (auch hier sind Schleifen nützlich)
  • Liste sortieren
  • Muster in einer Liste erkennen und auswerten
Jessicaaa92 
Fragesteller
 30.06.2020, 16:47

Dass man das braucht, weiß ich ja. Aber ich weiß nicht, wie und wann ich was einbringen muss

0
xxxcyberxxx  30.06.2020, 16:48
@Jessicaaa92

Dann teile das doch in kleinere Probleme auf und versuche, diese nach und nach zu lösen ...

0
Jessicaaa92 
Fragesteller
 30.06.2020, 16:49
@xxxcyberxxx

Ich weiß ja nicht mal, wo ich überhaupt anfangen soll.. wo der ,,Kopf " anfängt usw

0
xxxcyberxxx  30.06.2020, 16:56
@Jessicaaa92

fang doch mal damit ein, eine Funktion zu schreiben, die dir eine zufällige Zahl in einem gegebenen Intervall zurückgibt. Das Intervall könntest du z.B. durch zwei übergebene Parameter festlegen. Denn diese Funktion brauchst du immer wieder ...

1
Jessicaaa92 
Fragesteller
 30.06.2020, 17:12
@xxxcyberxxx
#!/usr/bin/python
from random import randint
from Tkinter import *

def roll():
    for i in range(5):
        if v[i].get() == 0:
            w[i] = randint(1,6)
            ergebnis[i].configure(text=w[i])

root=Tk()
root.title("Checkbuttons")

w = [0,0,0,0,0]
v = []
ergebnis = []
hold = []

for col in range(4,9):
    ergebnis.append(Label(root,text=w[col-4],width=5))
    ergebnis[-1].grid(row=0,column=col)
    v.append(IntVar())
    hold.append(Checkbutton(root,variable=v[-1]))
    hold[-1].grid(row=1,column=col)


butroll=Button(root,text="Roll 1!",command=roll).grid(row=5,column=5)
root.mainloop() 
0
xxxcyberxxx  30.06.2020, 17:18
@Jessicaaa92
Das meldet einen Fehler

dann lies doch mal deinen Fehler. Vermutlich findet er in roll v und w nicht, weil diese nicht global genutzt werden ...

Ich hab den Code übrigens nicht komplett durchgeschaut und werd es auch nicht tun

und warum gleich am Anfang tkinter, wenn du noch nichtmal die Grundlagen wirklich beherrscht? Das Bild sieht so aus, als will es das einfach als Text ind er Kommandozeile - mit Print

1
Jessicaaa92 
Fragesteller
 30.06.2020, 17:26
@xxxcyberxxx

Ja der fehler ist tkinter:

Traceback (most recent call last):

 File "C:\Users\Acer2\Documents\Info\Python\Kniffel", line 3, in <module>

   from Tkinter import *

ModuleNotFoundError: No module named 'Tkinter'

0
offeltoffel  01.07.2020, 07:02
@Jessicaaa92

Du hast Tkinter scheinbar noch gar nicht installiert...

Ist es denn notwendig, dass man Knöpfe zum Drücken hat? In deiner Fragestellung sieht es doch eher so aus, als müsste man die Eingaben per Tastatur tätigen.

0
xxxcyberxxx  01.07.2020, 09:42
@offeltoffel
Ist es denn notwendig, dass man Knöpfe zum Drücken hat? In deiner Fragestellung sieht es doch eher so aus, als müsste man die Eingaben per Tastatur tätigen.

genau das hab ich auch gesagt, der Fragesteller hat die Frage aber wohl eher ignoriert. Na ja, nicht mein Problem

Das Bild sieht so aus, als will es das einfach als Text ind er Kommandozeile - mit Print
0
Jessicaaa92 
Fragesteller
 01.07.2020, 11:24
@xxxcyberxxx

Ja aber dieser Befehl erfüllt doch ohnehin nicht die Aufgabenstellungen, oder? Wie gesagt, ich kenne mich dabei kaum aus und habe trotzdem etwas versucht.

0
xxxcyberxxx  01.07.2020, 11:25
@Jessicaaa92
Ja aber dieser Befehl erfüllt doch ohnehin nicht die Aufgabenstellungen, oder?

print alleine nicht, nein.

Du kannst über Print aber quasi alles auf der Konsole ausgeben und musst dich nicht mit der GUI-Programmierung rumschlagen. Zahlen, Text, Listen usw ...

0
Jessicaaa92 
Fragesteller
 01.07.2020, 11:47
@xxxcyberxxx

Nein, ich meine, dass mein kompletter Befehl überhaupt nicht der Aufgabenstellung entspricht, oder?

0
xxxcyberxxx  01.07.2020, 12:00
@Jessicaaa92

wie gesagt, ich hab mir deinen Code nicht komplett angeschaut, aber die ganze GUI-Erstellung hättest du dir sparen können, die macht das unnötig kompliziert und unübersichtlich - vor allem, wenn man "Keine Ahnung" hat und die Grundlagen nicht 100% beherrscht

0
Jessicaaa92 
Fragesteller
 01.07.2020, 12:43
@xxxcyberxxx

Ich hab auch noch das hier:

from random import *

e = input("Zahle einen Einsatz in CHF:")

msgDlg("Wuerfle zweimal.")

w1 = randint(1,6)

w2 = randint(1,6)

msgDlg("Du hast eine", w1, "und", w2, "geworfen.")

if w1 == w2 :

 a = 3*e

else:

 msgDlg("Wuerfle ein drittes Mal.")

 w3 = randint(1,6)

 msgDlg("Du hast eine", w3, "geworfen.")

 if w3 == w1 or w3 == w2 :

   a = 1.5*e

 else:

     a = 0

msgDlg("Du erhaelst CHF", a, "ausbezahlt.")

0
xxxcyberxxx  01.07.2020, 12:46
@Jessicaaa92

Schön, von welcher Seite hast du das kopiert?

Denn die Aufgabenstellung und das, was dort ausprogrammiert ist, ist unterschiedlich ...

Ist mir aber auch egal, du musst das ganze ja jetzt nur anpassen

0
Jessicaaa92 
Fragesteller
 01.07.2020, 15:38
@xxxcyberxxx

Ja das msgDlg hab ich ja geändert. Aber ich hab damit leider immer noch nicht die Aufgabenstellungen beantwortet. Kannst du mir bitte bitte helfen

0
xxxcyberxxx  01.07.2020, 15:49
@Jessicaaa92

ersetz erstmal das msgDlg durch print ...

dann mach eine Schleife, um die ersten 5 Würfe zu generieren

dann mach eine zweite Schleife mit der gleichen Anzahl an durchläufen und frag jedes mal, ob ein Wurf erneut gewürfelt werden soll

dann würfel eben diese Würfel neu aus und ersetze den alten Wert

das nochmal wiederholen

am Ende die unsortierte und sortierte Liste ausgeben ...

0
Jessicaaa92 
Fragesteller
 01.07.2020, 16:04
@xxxcyberxxx

MsgDlg hatte ich schon ersetzt. Aber die anderen Sachen weiß ich nicht, wie ich das machen soll. Ich bekomm das mit dem einrücken undso nie hin..

0
xxxcyberxxx  01.07.2020, 16:12
@Jessicaaa92

Ich verwende einfach mal 1 Tab hier Synonym für 4 Leerzeichen

Innere "Körper" werden immer mit einem Tab mehr eingerückt.

z.B. hier ein Programm, welches Zahlen 1 bis 5 einer Liste hinzufügt und dann über den Index jedes mal die Zahl in der Liste testet, ob es gerade oder ungerade ist

L = list()
for i in range(5):
    L.append(i+1)

for i in range(len(L)):
    if L[i] % 2:
        print(L[i], "ist ungerade")
    else:
        print(L[i], "ist gerade")

Und sollte jemand mit Python-Erfahrung das lesen: ja, das ist unnötig so ausgestreckt, um zu zeigen, wie man mit Listen z.B. arbeitet.

Du könntest z.B.auch direkt die Elemente aus der Liste abrufen

for i in L:
    if i % 2:
        print(i, "ist ungerade")
    else:
        print(i, "ist gerade")
1
xxxcyberxxx  01.07.2020, 18:07
@Jessicaaa92

bruh ... du siehst in mienem Beispiel die erste Schleife, wie ich dort jeden Integer von 1 bis 5 zur Liste hinzufüge? Du willst eben NICHT 1 bis 5 hinzufügen, sondern 5 Zufallszahlen

0
Jessicaaa92 
Fragesteller
 01.07.2020, 18:29
@xxxcyberxxx

Könntest du mir den 1. Wurf bitte vorzeigen? Ich kann mir das gerade nicht vorstellen..

0
xxxcyberxxx  01.07.2020, 18:51
@Jessicaaa92

Was quasi schon die Aufgabe ist ... also nein ...ich hab dir genug Hinweise gegeben und du hast in deiner kopierten Lösung auch schon eine Funktion gehabt, die dir hilft ...

1
Jessicaaa92 
Fragesteller
 01.07.2020, 18:54
@xxxcyberxxx

Außerdem würde ich nicht so verzweifelt darum betteln, wenn ich es wüsste. Du warst ja wohl selbst mal Schüler*in und wusstest nicht immer alles. Und dann ist man nunmal auf die hilfe der anderen abgewiesen. Ich bin ja bereit, zu lernen, aber wenn ich nicht verstehe, was du mit deinen Beispielen mir sagen willst, dann bringt es mir nichts. Ich will doch nur den 1. Wurf wissen, es heißt ja nicht mal, dass ich den 2. Und den 3. Anhand dessen überhaupt weiß. Aber ich würde das dann versuchen für die anderen würfe zu ,,übertragen"

Und nein, die hilft mir eben nicht..

0
xxxcyberxxx  01.07.2020, 19:00
@Jessicaaa92
Du warst ja wohl selbst mal Schüler*in und wusstest nicht immer alles

klar, aber ich hab mich hingesetzt und es nachgeschaut.

Ich studiere Informatik, ich hab das Studium auch mit 0 Programmiererfahrung angefangen. Und du solltest genau das tun, was ich getan habe: Die Basics lernen und sehr viel Dokumentation lernen ...

Da du aber eher bettelst, werd ich jetzt hier auch nicht weiterhelfen. Viel Erfolg noch

1
Jessicaaa92 
Fragesteller
 01.07.2020, 19:11
@xxxcyberxxx

Ja ich studiere es nicht & habe das erst seit ein paar Wochen. Was soll ich da lernen, wenn ich nicht weiß, was ich lernen soll? Es gibt so viele sachen darüber.. soll ich mir etwa alles rein ziehen?

Ich setze mich ja selbst seit mehreren tagen hin und versuche es hinzubekommen, dieses fach interessiert mich aber überhaupt nicht, dementsprechend habe ich auch nicht so eine Motivation wie du. Und trozdem versuche ich es hinzubekommen, schreitere aber offensichtlich..

0
xxxcyberxxx  01.07.2020, 19:13
@Jessicaaa92
soll ich mir etwa alles rein ziehen?

die Grundlagen sind schnell drin ... https://docs.python.org/3/tutorial/

Ja ich studiere es nicht

das war auch nur als Beispiel ... wie gesagt, ich bin auch ohne Erfahrung rein ...

habe das erst seit ein paar Wochen

so what?

1
Jessicaaa92 
Fragesteller
 01.07.2020, 19:15
@xxxcyberxxx

Ja meine englisch Kenntnisse sind jetzt auch nicht so gut, dass ich das verstehe..

0
offeltoffel  02.07.2020, 08:29
@Jessicaaa92

Ich muss xxxcyberxxx hier wirklich in Schutz nehmen. Jessica, es ist das Eine, dass du keine oder nur wenig Programmierkenntnisse hast. Das geht sicher vielen in deiner Klasse so. Und die Aufgabe mag anspruchsvoll sein, aber dein Wunschdenken ist halt irgendwie, dass wir dich aus der Scheiße holen. Das ist nicht unsere Aufgabe. Wir helfen, wenn konkrete Fragestellungen sind, z.B. wenn ein gut durchdachter Code irgendwo Fehler hat. Aber es scheitert bei dir ja ganz offensichtlich bei sämtlichen Grundlagen.

Stell dir vor, du willst einer Freundin helfen, weil die ein 3-Gänge-Menü zubereiten muss. Das Rezept ist anspruchsvoll. Du erklärst ihr, wie sie einen Dampfgarer benutzt, wie man eine Soße gut bindet, welche Gewürze sie zum Abschmecken nehmen könnte und sie fragt aber nur "was ist denn dieses 'Herdplatte' von dem du immer redest?".

Die Oberstufe verlangt von dir, dass du selbständig an Problemen arbeitest. Ein wichtiger Schritt ist dabei, dass du erkennst, wo dein Defizit ist und daran arbeitest. Wenn du beim Programmieren noch nicht so weit bist, dann musst du üben, üben, üben. Wenn du bei dieser Aufgabe scheiterst, musst du mit deinem Lehrer reden, damit der dir sagt, welche Grundlagen er für den Kurs erwartet. Und wenn du dann sagst, du kannst aber halt nicht so gut Englisch, dann ist das halt einfach ehrlich DEIN Problem. Mit der Einstellung wirst du im Leben, z.B. in der Arbeitswelt, noch hundertmal auf die Schnauze fliegen, dann kannst du auch nicht die Leute beschuldigen, die dir ohnehin helfen wollten, nur weil du mit der Hilfe nichts anfangen kannst (was allein deine Schuld ist).

Karma schlägt bereits jetzt in diesem Moment zurück, nämlich, dass du deine Aufgabe nicht schaffst, weil du hier null Bereitschaft zeigst, ernsthaft das Problem anzugehen, sondern einfach nur eine fertige Lösung präsentiert haben möchtest.

1
Jessicaaa92 
Fragesteller
 13.03.2021, 21:22
@offeltoffel

Ja keiner hat die 0 gewählt #just saying

Wunschdenken ist halt irgendwie, dass wir dich aus der Scheiße holen

Vorallem ,,wir" was hast du schon dazu beigetragen, außer nh unnötige moralpredig?...

Karma schlägt bereits jetzt in diesem Moment zurück, nämlich, dass du deine Aufgabe nicht schaffst, weil du hier null Bereitschaft zeigst, ernsthaft das Problem anzugehen, sondern einfach nur eine fertige Lösung präsentiert haben möchtest.

Ha ha nein, es gibt zum glück noch verständisvolle Menschen, die mir das bereits geschickt haben & mir alle Schritte erklärt haben, sodass ich das verstanden habe! Und nh komplette Lösung verlange ich nicht einmal... hilfreiche Ansätze, links ect würden schon langen.. Aber hey, nicht jeder kann empathisch sein 🙅

0

Die Frage ist doch, wobei du nun genau Probleme hast. Scheitert es daran, eine Programmstruktur zu überlegen? Fehlen dir Befehle? Fehlt es an Verständnis darüber, was das Ziel der Übung ist?

Wenn du eine konkrete Frage stellst, können wir dir helfen. Schließlich können wir dir nicht einfach das Programm schreiben und zuschicken. Ich weiß, dass es schwer ist, genaue Fragen zu deinem Problem zu formulieren, aber du wirst sehen, dass allein das Überlegen, wo genau du hängst, dir etwas mehr Klarheit verschaffen wird!

Jessicaaa92 
Fragesteller
 30.06.2020, 11:56

Ja also ich verstehe die Aufgabenstellungen nicht. Und wie ich das programmieren soll. Bin Anhängerin und kann nur ein paar Befehle

0
offeltoffel  30.06.2020, 12:01
@Jessicaaa92

Das Programm sieht mir ehrlich gesagt nicht wirklich nach etwas aus, das für einen blutigen Anfänger geeignet ist.

Das, was auf dem Screenshot zu sehen ist, scheint mir ein Beispiel zu sein, wie das Programm aussehen könnte, wenn man es ausführt.

  1. Das System "würfelt", d.h. es erzeugt 6 Zufallszahlen zwischen 1 und 6 und gibt diese per "print" aus
  2. Du wirst nacheinander gefragt, ob du Würfel 1, 2, 3, 4, 5, 6 neu würfeln möchtest, dabei musst du jeweils mit Ja oder Nein antworten (Funktion: "input")
  3. Die Würfel, bei denen die Abfrage ein "ja" ergeben hat, bekommen eine neue Zufallszahl zwischen 1 und 6
  4. Bei den Würfeln, bei denen du vorher "ja" angegeben und die einen neuen Zufallswert bekommen haben, kannst du dich noch ein zweites Mal entscheiden, ob du sie neu würfelst oder nicht
  5. Das Ganze wiederholt sich noch ein drittes Mal
  6. Die endgültige Augenzahl der sechs Würfel wird sortiert (Funktion: "sort")
  7. Das Programm gibt dir aus, um was für einen Wurf es sich handelt: Pärchen, Straße, Full House, Kniffel, ...

Grundsatzfrage: kennst du das Spiel Kniffel und weißt, wie man es spielt?

2
offeltoffel  30.06.2020, 12:12
@Jessicaaa92

Dann ist mir schon klar, dass du nicht weiterkommst. Also, pass auf:

Beim Kniffel hat man fünf Würfel, die man zuerst gemeinsam würfelt. Nach dem Wurf hat man die Möglichkeit einen, mehrere oder gar keinen Würfel "zur Seite zu legen". Würfel, die man zur Seite legt, sind quasi gesperrt und bleiben bis zum Ende der Runde so, wie sie sind. Den Rest würfelt man ein zweites Mal. Wieder hat man dann die Möglichkeit, Würfel zur Seite zu legen. Mit dem Rest würfelt man ein drittes und letztes Mal. Nach dem dritten Wurf werden alle fünf Würfel ausgewertet.

Durch die geschickte Auswahl an Würfeln, die man neu würfelt oder zur Seite legt, versucht man bestimmte Kombinationen zu erhalten, die man auf einen Zettel eintragen kann.

  • Dreierpasch: drei Würfel mit gleicher Augenzahl, z.B. "drei Vierer" (1, 3, 4, 4, 4)
  • Viererpasch: vier Würfel mit gleicher Augenzahl, z.B. "vier Sechser" (2, 6, 6, 6, 6)
  • Kleine Straße: Vier Würfel in aufsteigender Reihenfolge, z.B. "2, 3, 4, 5" oder "1, 2, 3, 4". Der fünfte Würfel darf etwas Beliebiges zeigen, also z.B. "2, 3, 3, 4, 5" wäre eine kleine Straße, wenn man eine der Dreien ignoriert
  • Große Straße: Fünf Würfel in aufsteigender Reihenfolge, z.B. "1, 2, 3, 4, 5" oder "2, 3, 4, 5, 6"
  • Full House: Ein Zweier- und ein Dreierpärchen, z.B. "2, 2, 5, 5, 5" oder "4, 4, 4, 6, 6"
  • Kniffel: Fünf Würfel mit gleicher Augenzahl, z.B. "3, 3, 3, 3, 3"

Wie kommt es, dass du so eine Aufgabe gestellt bekommst, aber keinerlei Hintergrundinfo? Ist das eine Hausaufgabe?

2
Jessicaaa92 
Fragesteller
 30.06.2020, 16:46
@offeltoffel

Ne ist keine Hausaufgabe. In der Oberstufe muss man sich halt vieles selbst vei beibringen. Wollte es abwählen, aber ging leider nicht mehr

0

Beschreibe zunächst die Spielkomponenten und das Spiel in seinem Ablauf. Entweder in Stichpunkten oder kurzen Sätzen. Beginne anschließend, dazu einen Programmablaufplan zu bauen. Auf dem aufbauend sollte eine Implementation in Python dann nicht mehr so schwerfallen.

Jessicaaa92 
Fragesteller
 30.06.2020, 11:57

Da fängt das Problem schon an😅 ich hab keine Vorstellungskraft bei programmieren und erstellen

0
regex9  30.06.2020, 12:00
@Jessicaaa92

Aber du weißt doch, wie man Kniffel spielt? Es geht gerade nur darum, den Ablauf des Spiels zu beschreiben, a la - Spieler 1 würfelt, Spieler 1 würfelt nochmal, u.ä.. Jeden einzelnen Prozess beschreibst du folgend nochmals, aber kleinteiliger. Python musst du bis dahin überhaupt nicht können.

1
Jessicaaa92 
Fragesteller
 30.06.2020, 12:03
@regex9

Ich weiß nur, dass das ein würfelspiel ist

1