Python :: Aufgabe #351

2 Lösungen Lösungen öffentlich

Bingo-Lotterie (Spielerweiterung)

Fortgeschrittener - Python von JKooP - 19.04.2021 um 20:17 Uhr
Ich habe die bereits bestehende Aufgabe
"Klassisches Bingo mit verzögert gezogenen Nummern (C# 243, C++ 220, PY 208, …) von maxi72501"
noch einmal aufgegriffen.

Das Spiel soll dahingehend erweitert werden, dass 22 Zahlen gezogen werden und
der vorab erstelle Spielschein (Aufgabe besteht bereits) damit verglichen wird.

Finden sich fünf Treffer in waagerechter, senkrechter oder diagonaler Reihe heißt das BINGO (siehe Bilder).

Als Ergebnis soll die Anzahl der Gewinne (Einfach-, Zweifach- bzw. Dreifach-Bingo) ausgegeben werden.

Viel Spaß

Lösungen:

vote_ok
von AlexGroeg (2010 Punkte) - 26.04.2021 um 21:33 Uhr
Quellcode ausblenden Python-Code

from random import sample
import numpy as np
from time import sleep

n = 75  #22  # Anzahl gezogene Zahlen 
alle_zahlen = list(range(1, 76))
gewinnzahlen = sample(alle_zahlen, n)
 
liste = []
zahlen_1_15 = list(range(1, 16))
zahlen_16_30 = list(range(16, 31))
zahlen_31_45 = list(range(31, 46))
zahlen_46_60 = list(range(46, 61))
zahlen_61_75 = list(range(61, 76))
 
liste.append(sample(zahlen_1_15, 5))
liste.append(sample(zahlen_16_30, 5))
liste.append(sample(zahlen_31_45, 5))
liste.append(sample(zahlen_46_60, 5))
liste.append(sample(zahlen_61_75, 5))
 
 
def gewinnen(liste):
    bingo = 0
    
    # spalte
    for i in range(0, 5):
        if liste[i].count("X") == 5:
            print("Spalte,", end=' ')
            bingo += 1
 
    # zeile
    for i in range(0, 5):
        x_se = 0
        for j in range(0, 5):
            if liste[j][i] == "X":
                x_se += 1
                if x_se == 5:
                    print("Zeile,", end=' ')
                    bingo += 1
                    
    # diagonal
    if liste[0][0] == "X" and liste[1][1] == "X" and liste[2][2] == "X" and liste[3][3] == "X" and liste[4][4] == "X":
        print("Diagonal,", end=' ')
        bingo += 1
    if liste[0][4] == "X" and liste[1][3] == "X" and liste[2][2] == "X" and liste[3][1] == "X" and liste[4][0] == "X":
        print("Diagonal,", end=' ')
        bingo += 1

    
    if bingo == 1:
        return 'Einfaches Bingo'
    if bingo == 2:
        return 'Zweifaches Bingo'
    if bingo == 3:
        return 'Dreifaches Bingo'
    
    return False
 
 
def spiel():
    global n
    for i in range(0, n):
        sleep(0)
        for j in range(0, 5):
            for k in range(0, 5):
                if liste[j][k] == gewinnzahlen[i]:
                    liste[j][k] = "X"
                gewinnart = gewinnen(liste)
                if gewinnart:
                    print(gewinnart)
                    print(np.transpose(np.array(liste)))
                    print('\ngezogene Gewinnzahlen:\n', gewinnzahlen)
                    return None
                
    print('kein Gewinn')
 

spiel()

vote_ok
von eisheiliger (3750 Punkte) - 27.04.2021 um 16:15 Uhr
Quellcode ausblenden Python-Code

"""
#351: Bingo-Lotterie (Spielerweiterung)
Ich habe die bereits bestehende Aufgabe (PY 208) von maxi72501" noch einmal aufgegriffen. Das Spiel soll dahingehend
erweitert werden, dass 22 Zahlen gezogen werden und der vorab erstelle Spielschein (Aufgabe besteht bereits) damit
verglichen wird. Finden sich fünf Treffer in waagerechter, senkrechter oder diagonaler Reihe heißt das BINGO. Als
Ergebnis soll die Anzahl der Gewinne (Einfach-, Zweifach- bzw. Dreifach-Bingo) ausgegeben werden.

In Aufgabe PY208 soll man ein Klassisches Bingo erstellen wo man eine zufällige Karte erhält wo auf einem 5 * 5 Feld
Zahlen von 1 bis 75 verteilt liegen. Zu beachten ist das in der ersten Spalte zahlen von 1 bis 15, in der zweiten
Spalte 16 bis 30, in der Dritten 31 bis 45, in der vierten 46 bis 50 und in der letzten 51 bis 75.
"""

from random import sample


def prf_bingo(liste, ergeb):
    zeil = []
    spal = []
    diag = 0
    print("\n", "Spielschein:")
    for i in range(0, len(liste)):
        print(liste[i])
    print("Ziehung:")
    print(ergeb)
    print("Erfolgreiche Zahlen in Zeile und Spalte:")
    for i in range(len(liste)):
        for j in range(len(liste[i])):
            for k in range(0, len(ergeb)):
                if ergeb[k] == liste[i][j]:
                    print(liste[i][j], i, j)
                    zeil.append(i)
                    spal.append(j)
                    if i == j:
                        diag += 1
    anzzei = [zeil.count(x) for x in set(zeil)].count(5)
    anzspa = [spal.count(x) for x in set(spal)].count(5)
    if diag == 5:
        diag = 1
    else:
        diag = 0
    print("Spielergebnis:")
    print("Gleiche Zeilen: ", anzzei)
    print("Gleiche Spalten:", anzspa)
    print("Diagonale:      ", diag)
    if anzspa + anzzei + diag > 2:
        print("Dreifach-Bingo")
    elif anzspa + anzzei + diag == 2:
        print("Zweifach-Bingo")
    elif anzspa + anzzei + diag == 1:
        print("Einfach-Bingo")
    else:
        print("No Bingo")


def start_bingo():
    ziehung = sample(list(range(1, 76)), 22)
    bingolist = []
    zahlen_1_15 = list(range(1, 16))
    zahlen_16_30 = list(range(16, 31))
    zahlen_31_45 = list(range(31, 46))
    zahlen_46_50 = list(range(46, 51))
    zahlen_51_75 = list(range(51, 75))
    bingolist.append(sample(zahlen_1_15, 5))
    bingolist.append(sample(zahlen_16_30, 5))
    bingolist.append(sample(zahlen_31_45, 5))
    bingolist.append(sample(zahlen_46_50, 5))
    bingolist.append(sample(zahlen_51_75, 5))
    prf_bingo(bingolist, ziehung)


start_bingo()             # Bingo aus der Ziehung
bili = [[74, 8, 14, 1, 15], [20, 25, 30, 23, 24], [35, 45, 34, 40, 33], [46, 48, 47, 49, 50], [54, 63, 65, 64, 61]]
erge_1 = [74, 9, 63 , 13, 54, 72, 67, 43, 36, 65, 10, 15, 64, 32, 52, 60, 53, 55, 19, 49, 61, 11]
erge_2 = [74, 35, 63, 13, 50, 72, 67, 43, 33, 65, 20, 15, 62, 32, 55, 60, 53, 55, 24, 46, 61, 54]
erge_3 = [74, 35, 63, 25, 50, 34, 49, 43, 33, 65, 20, 15, 62, 32, 55, 64, 53, 55, 24, 46, 61, 54]
prf_bingo(bili, erge_1)   # Bingo mit Testdaten, Reihe einfach
prf_bingo(bili, erge_2)   # Bingo mit Testdaten, Spalte doppelt
prf_bingo(bili, erge_3)   # Bingo mit Testdaten, Reihe, Spalte, Diagonale


1810966

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.