Python :: Aufgabe #271

2 Lösungen Lösungen öffentlich

Game - Heiß oder Kalt

Anfänger - Python von DavidDev024 - 20.04.2020 um 19:36 Uhr
Das Spiel läuft folgender Maßen ab:

- Spieler 1 denkt sich eine Zahl aus
- Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
- nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler 1 näher kommt oder nicht)
-Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit ausgegeben werden.

Have Fun

Lösungen:

vote_ok
von thunderbird (820 Punkte) - 27.04.2020 um 09:07 Uhr
Quellcode ausblenden Python-Code
from os import system
from time import perf_counter

#Spielereingaben
print(30*"-"+"\nSpiel: Hot or Cold\n"+30*"-")
player1 = input("Name Spieler 1: ")
player2 = input("Name Spieler 2: ")
print(f"\n{player2} bitte schliessen Sie die Augen, oder schauen weg bis {player1} seine Eingabe getaetigt hat.")
zahl = int(input(f"{player1} Bitte geben Sie Ihre Zahl ein: "))

system("cls")
print("Es wurde eine Zahl eingegeben.\n")

check = False
sw = 10
ver = 0

#Spielbeginn
while not check:
    guessNum = int(input(f"{player2} Erraten Sie die Zahl: "))

    if ver == 0:
        if guessNum == zahl:
            print("\nGlückwunsch, das war die richtige Zahl")
            print(f"Es wurden {ver} Versuche und {perf_counter()}sek benoetigt.")
            check = True
        elif guessNum < zahl or guessNum > zahl:
            if (abs(zahl-guessNum))<sw:
                print("Heiss")
                ver += 1
            else:
                print("Kalt")
                ver += 1
        guessNumOld = guessNum
    else:
        if guessNum == zahl:
            print("\nGlückwunsch, das war die richtige Zahl")
            print(f"Es wurden {ver} Versuche und {perf_counter()}sek benoetigt.")
            check = True
        elif abs(guessNum-zahl) == abs(guessNumOld-zahl):
            print("Gleiche Entfernung")
            ver += 1
        elif guessNum < zahl or guessNum > zahl:
            if abs(zahl-guessNum)<sw:
                print("Heiss")
                ver += 1
            elif (abs(zahl-guessNum))<abs((zahl-guessNumOld)):
                print("Waermer")
                ver += 1
            else:
                print("Kaelter")
                ver += 1
    guessNumOld=guessNum
vote_ok
von daVinci (320 Punkte) - 15.05.2020 um 17:12 Uhr
Quellcode ausblenden Python-Code
###########################################################################################
# Aufgabe #271 - Kälter und Wärmer -- GAME
###########################################################################################
#     ___________________________________
#____|  A u f g a b e n s t e l l u n g  |_________________________________________________
#
#      - Spieler 1 denkt sich eine Zahl aus
#      - Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
#      - nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen
#        und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler
#        1 näher kommt oder nicht)
#      - Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit
#        ausgegeben werden.
#     _____________________________
#____|  I n f o r m a t i o n e n  |_______________________________________________________
#
#       -/-
#
###########################################################################################
#=========================================================================| code by daVinci
###########################################################################################
#------------------------------------------------------------------------------------------
# p.s. ich bin noch ein absoluter Neuling in diesem Gebiet und freue mich für jeden
# unterstützdenen Tipp zur zukünfig besseren/optimierten Umsetzung :)
#------------------------------------------------------------------------------------------
# Import aus Standartbibliothek für versteckte Eingabe von "ZIELZAHL"
from getpass import getpass
# Import für Anzeige von verstrichener Zeit
import datetime as dt
#------------------------------------------------------------------------------------------
# Zähler Startwert
vben = 1
#------------------------------------------------------------------------------------------
# Funktion für ersten Versuch (keine Vergleichszahl, deshalb wird geprüft ob Zahl mehr als
# doppelt so groß oder mehr als doppelt so klein ist)
def ersterversuch (zahlx, zielzahl):
    if zahlx == zielzahl:
        return 1
    elif (zahlx >= (zielzahl + zielzahl) or zahlx <= (zielzahl - zielzahl)):
        return "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n K  A  L  T\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n"
    else:
        return "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n W  A  R  M\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n"
#------------------------------------------------------------------------------------------
# Funktion zum Vergleich mit der vorherigen Eingabe
def versuche(zahlx, zahlx2, zielzahl):
    if zahlx2 == zielzahl:
        return 1
    else:
        if (zahlx2 > zielzahl):
            jetziger = zahlx2 - zielzahl

            if (zahlx > zielzahl):
                vorheriger = zahlx - zielzahl
            elif (zahlx < zielzahl):
                vorheriger = zielzahl - zahlx

        elif (zahlx2 < zielzahl):
            jetziger = zielzahl - zahlx2

            if (zahlx > zielzahl):
                vorheriger = zahlx - zielzahl
            elif (zahlx < zielzahl):
                vorheriger = zielzahl - zahlx

    if (jetziger < vorheriger):
        return "\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n W  Ä  R  M  E  R\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n"
    else:
        return "\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n K  Ä  L  T  E  R\n#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#\n"
#------------------------------------------------------------------------------------------
# Startmeldung
print ("\n===============================================================================")
print ("                              HEISS - KALT  -- GAME")
print ("===============================================================================\n")
print ("SPIELER_01 gibt eine Zahl ein die SPIELER_02 dann erraten muss. Nach jedem")
print ("Versuch von SPIELER_02 die Zahl zu erraten, wird eine Meldung ausgegeben die")
print ('mit "WÄRMER" oder "WÄLTER" den Hinweis liefert ob sich der letze Versuch näher')
print ("oder ferner von der Ziel_Zahl befindet.")
print ("===============================================================================\n")
#------------------------------------------------------------------------------------------
# Eingabe der zu erratenden Zahl
zielzahl = eval(getpass("SPIELER_01, geben Sie jetzt bitte Ihre Zahl ein: "))
print ("SPIELER_01 hat die zu erratende Zahl festgelegt!")
print ("===============================================================================\n")
#------------------------------------------------------------------------------------------
# Starte Timer
n1=dt.datetime.now()
#------------------------------------------------------------------------------------------
# Erster Versuch (Eingabe)
print ("-------------------------------------------------------------------------------")
zahlx = eval(input("SPIELER_02, geben Sie jetzt Ihre Zahl ein: "))
print ("-------------------------------------------------------------------------------\n")
#------------------------------------------------------------------------------------------
# Erster Versuch (Prüfung)
if ersterversuch(zahlx, zielzahl) == 1:
    # Stoppe Timer
    n2=dt.datetime.now()
    zeit = (n2-n1).seconds

    print ("\n===============================================================================")
    print ("HERZLICHEN GLÜCKWUNSCH !")
    print ("WOW! Sie haben die Zahl von SPIELER_01 beim 1. VERSUCH ERRATEN!")
    print ("Sie haben für  1  Versuch ", zeit, " Sekunden benötigt.")
    print ("===============================================================================\n")
    exit()
else:
    print (ersterversuch(zahlx, zielzahl))
#------------------------------------------------------------------------------------------
# Weitere versuche (Schleifenanfang für Wdl. der Rateversuche von SPIELER_02)
while True:
    # Zähler - Anzahl von Versuchen
    vben += 1
    #--------------------------------------------------------------------------------------
    zahlx2 = eval(input("SPIELER_02, um weiter zu raten geben Sie jetzt eine weitere Zahl ein: "))
    #--------------------------------------------------------------------------------------
    if versuche(zahlx, zahlx2, zielzahl) == 1:
        # Stoppe Timer
        n2=dt.datetime.now()
        zeit = (n2-n1).seconds

        print ("\n===============================================================================")
        print ("HERZLICHEN GLÜCKWUNSCH !")
        print ("Sie haben die Zahl von SPIELER_01 beim ", vben,". VERSUCH ERRATEN!")
        print ("Sie haben für ", vben, " Versuche ", zeit, " Sekunden benötigt.")
        print ("===============================================================================\n")
        break
    else:
        print (versuche(zahlx, zahlx2, zielzahl))
        zahlx = zahlx2
        continue