Python :: Aufgabe #15

7 Lösungen Lösungen öffentlich

Zahlen Raten - Fortgeschrittener

Fortgeschrittener - Python von zayc_ - 28.12.2012 um 14:00 Uhr
Das zu programmierende Programm soll eine Zufallszahl (integer, der User soll nach dem Bereich gefragt werden) generieren.
Der User soll diese erraten. Nach jedem Versuch soll der User darüber informiert werden, der wie vielte Versuch es war, ob er richtig oder falsch liegt, und wenn er falsch liegt ob die gesuchte Zahl grösser oder kleiner als die vom User eingegebene ist.

Zusatz für Fortgeschrittene:
Bei Falscheingaben (Buchstaben, Sonderzeichen, etz.) soll der User darüber informiert werden.
Bei den Versuchen >10 soll eine führende Null mit ausgegeben werden (also statt 1,2,3 soll 01, 02 ,03 ausgegeben werden.)
Bei der wiederholten Eingabe einer Zahl soll der User darüber informiert werden.
Der User soll den Bereich in dem die Zufallszahl liegen soll, selbst definieren.
Der User soll informiert werden, wenn sein Versuch ausserhalb des definierten Bereichs liegt.



Beispiel einer Konsolenausgabe:

Konsolenausgabe:


Bitte die Untergränze wählen: 20
Bitte die Obergränze wählen: 60

Bitte erraten sie die gesuchte Zahl, sie befindet sich zwischen 20 und 60.

Ihr 01. Versuch: 5
Die eingegebene Zahl befindet sich ausserhalb des von ihnen definierten Bereich.

Ihr 02. Versuch: halloooo
Bitte nur Z A H L E N eingeben.

Ihr 03. Versuch: 55
Die gesuchte Zahl ist kleiner.

Ihr 04. Versuch: 25
Die gesuchte Zahl ist grösser.

Ihr 05. Versuch: 55
Mit dieser Zahl haben Sie es schon einmal versucht!

Ihr 06. Versuch: 40
Glückwunsch die von Ihnen eingegebene Zahl ( 40 ) stimmt mit der gesuchten Zahl überein.

Lösungen:

vote_ok
von ushy (470 Punkte) - 23.03.2015 um 22:58 Uhr
Quellcode ausblenden Python-Code
#Grenzen abfragen
fehler_1=1
while fehler_1==1:
    try:
        u_grenze=int(input('Geben sie die Untergrenze an: '))
        fehler_1=0
    except:
        print('Die Untergrenze muß eine Ganzzahl sein.')

fehler_2=1
while fehler_2==1:
    try:
        o_grenze=int(input('Geben sie die Obergrenze an: '))
        fehler_2=0
    except:
        print('Die Obergrenze muß eine Ganzzahl sein.')
                

#Zufallszahl Generieren
import random
random.seed
ziel=random.randint(u_grenze,o_grenze)

print('Bitte erraten sie die gesuchte Zahl. Sie liegt zwischen ',u_grenze,' und ',o_grenze,'.')

erraten=0
versuch=0
bisher=[]

#Wiederhole bis erraten
while erraten==0:
    fehler=1
    #Eingabe von Ganzzahlen prüfen
    while fehler==1:
        try:
            guess=int(input('Eingabe: '))
            fehler=0
        except:
            print('Das war keine Ganzzahl.')
    #Grenzen einhalten und bisherige Versuche merken
    if guess not in bisher and guess>=u_grenze and guess<=o_grenze:
        bisher.append(guess)
        versuch=versuch+1
        #Eingabe Auswerten
        if guess==ziel:
            print('Sie haben die Zahl in Versuch ',str(versuch).zfill(2),'erraten!')
            erraten=1
        elif guess<ziel:
             print('Die gesuchte Zahl ist größer.')
        elif guess>ziel:
            print('Die gesuchte Zahl ist kleiner.')
    elif guess in bisher:
        print(guess, 'haben sie bereits probiert.')
    elif guess<u_grenze or guess>o_grenze:
        print('Ihre Eingabe liegt ausserhalb des gewählten Bereichs.')
   
vote_ok
von jigga (4260 Punkte) - 10.06.2015 um 10:34 Uhr
Quellcode ausblenden Python-Code
import random
random.seed()

def spiel(unten, oben):
	versuch = 1
	liste = []
	eingabe_zahl = 0
	ratezahl = random.randint(unten,oben)

	print("\nErraten Sie nun die Zahl, die zwischen", unten, "und", oben, "liegt!\n")
	
	while eingabe_zahl != ratezahl:
		
		if versuch <= 9:
			eingabe = input("Ihr 0" + str(versuch) + ". Versuch: ")
		
		else:
			eingabe = input("Ihr " + str(versuch) + ". Versuch: ")
		
		try:
			eingabe_zahl = int(eingabe)

			if eingabe_zahl > oben or eingabe_zahl < unten:
				print("Ihre Zahl liegt auserhalb des definierten Bereichts!\n")
				versuch += 1

			else:
				if eingabe_zahl > ratezahl:
					if eingabe_zahl in liste:
						print("Mit dieser Zahl haben Sie es schon versucht!\n")
						versuch += 1
					
					else:
						liste.append(eingabe_zahl)
						print("Die gesuchte Zahl ist kleiner!\n")
						versuch += 1

				elif eingabe_zahl < ratezahl:
					if eingabe_zahl in liste:
						print("Mit dieser Zahl haben Sie es schon versucht!\n")
						versuch += 1
					
					else:
						liste.append(eingabe_zahl)
						print("Die gesuchte Zahl ist groesser!\n")
						versuch += 1
		except:
			print("Bitte nur Zahlen eingeben.\n")
			versuch += 1
			continue

	print("\nGlueckwunsch, die zu erratene Zahl war " + str(ratezahl) + ".")
	
	if versuch/(oben - unten) <= 0.5:
		print("Sie haben", versuch, "Versuche gebraucht. Sehr gut!")
	
	else:
		print("Sie haben", versuch, "Versuche gebraucht. Das koennen Sie besser!")
	
while True:

	unt = input("\nUntergrenze: ")
	ob = input("Obergrenze: ")

	try:
		unten = int(unt)
		oben = int(ob)
		
		if oben <= unten:
			print("Bitte Grenzen ueberpruefen!\n")
		
		else:
			spiel(unten,oben)

			nochmal = input("\nWollen Sie ein weiteres Spiel spielen (j/n): ")
			if nochmal == 'j' or nochmal == 'J':
				continue
			
			elif nochmal == 'n' or nochmal == 'N':
				print("Vielen Dank! Auf Wiedersehen!")
				break
			
			else:
				print("Anscheinend nicht... Auf Wiedersehen!")
				break

	except:
		print("Bitte nur ganze Zahlen!\n")
1x
vote_ok
von Nachbar (2820 Punkte) - 11.02.2017 um 16:11 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

import random

x = 0
tips = []

print "Definiere einen Zahlenbereich."

ug = input("\nUntergrenze: ")
og = input("Obergrenze: ")
zahl = random.randint(ug, og)

print "\nIch denke mir jetzt eine Zahl zwischen " + str(ug) + " und " + str(og) + ". Welche Zahl ist es?"

while True:
    x = x + 1
    # Buchstaben/Sonderzeichen verhindern
    while True:
        try:
            # Fuer fuehrende 0
            if x < 10:
                eingabe = input("\n0" + str(x) + ". Versuch: ")
                break
            else:
                eingabe = input("\n" + str(x) + ". Versuch: ")
                break
        except:
            print "\nBitte eine Zahl zwischen " + str(ug) + " und " + str(og) + " eingeben!"    
    # User im definierten Zahlenbereich halten    
    if eingabe < ug or eingabe > og:
        print "\n" + str(eingabe) + " liegt nicht im definierten Zahlenbereich!"
    # Wiederholt abgegebenen Tip anzeigen    
    elif eingabe in tips:
        print "\nDu hast schonmal " + str(eingabe) + " getippt und das war falsch!"
    elif eingabe == zahl:
        print "\n\nTREFFER! Richtig geraten nach " + str(x) + " Versuchen. :)"
        break
    elif eingabe < zahl:
        print "\nFalsch, die zu erratende Zahl ist groesser!"
    elif eingabe > zahl:
        print "\nFalsch, die zu erratende Zahl ist kleiner!"
    tips.append(eingabe)

vote_ok
von felixTheC (1200 Punkte) - 14.06.2017 um 22:17 Uhr
Quellcode ausblenden Python-Code

#! /usr/env/python3
from random import randint

#the language function and so on is only a feature because I think it is a nice idea :)
def language(lang):
    """
    This function needs a string as paramter and return a dictionary, 
    avalaibles are only english and german specially created for this game
    """
    eng = {'minimum':'Please set your minimum: ',
           'maximum':'Please set your maximum: ',
           'start': 'Please guess the number between %s and %s',
           'try':'Your %d. try: ', 'fail':'The game is called guess the NUMBER!!!!',
           'out':'Your number is out of the defined range',
           'again':'You had tryed this number bevor',
           'greater':'The number we are looking for is smaller', 'low':'The number we are looking for is greater',
           'win':'Congratulations the number you typed in ( %s ) was the number we are looking for'}
    deu = {'minimum':'Bitte wähle deine Untergrenze: ',
           'maximum':'Bitte wähle deine Obergrenze: ',
           'start': 'Bitte errate die Zahl zwischen %s und %s',
           'try':'Ihr %d. Versuch: ', 'fail':'Das Spiel heißt rate die NUMMER!!!!',
           'out':'Die eingegebene Zahl befindet sich ausserhalb des von ihnen definierten Bereich',
           'again':'Mit dieser Zahl haben Sie es bereits versucht',
           'greater':'Die gesuchte Zahl ist kleiner', 'low':'Die gesuchte Zahl ist größer',
           'win':'Glückwunsch die von Ihnen eingegeben Zahl ( %s ) stimmt mit der gesuchten Zahl überein'}
    if lang == 'english':
        return eng
    elif lang == 'deutsch':
        return deu


def chooseLang():
    """
    ask the user for a language and check the input if success it will return a language dictionary 
    """
    langDic = None
    languages = ['english', 'deutsch']
    lang = input('Please choose your language/Bitte wähle deine Sprache, english/deutsch: ')
    if lang in languages:
        langDic = language(lang)
        return langDic
    else:
        return chooseLang()


def checkNumbers(number, guess):
    """
    needs the number we are looking for and the guessing number as parameters
    checks the number with the guess, if the guess is not an int it will return a failure
    """
    try:
        if int(guess) > number:
            return 'greater'
        elif int(guess) < number:
            return 'low'
        elif int(guess) == number:
            return 'win'
    except:
        return 'fail'


def main():
    """
    the main function
    """
    langDic = chooseLang()
    guesses = 1
    guestNums = []
    
    #setting up the minimum and the maximum
    minimum = input(langDic['minimum'])
    maximum = input(langDic['maximum'])
    
    #creating the number which the user must guess
    theNumber = randint(int(minimum), int(maximum))
    
    print(langDic['start']%(minimum, maximum))
    
    while True:
        guess = input(langDic['try']%(guesses))
        guesses += 1
        check = checkNumbers(theNumber,guess)
        if guess in guestNums:
            print(langDic['again'])
        elif int(guess) < int(minimum) or int(guess) > int(maximum):
            print(langDic['out'])      
        else:
            guestNums.append(guess)
            if check == 'win':
                print(langDic[check]%(guess))
                break
            else:
                print(langDic[check])
                
            
            
if __name__ == '__main__':
    main()

vote_ok
von PythonIT (240 Punkte) - 19.08.2017 um 19:01 Uhr
Quellcode ausblenden Python-Code
# zahlenraten.py
from random import randint

untergrenze = int(input("Untergrenze eingeben: "))
obergrenze = int(input("Obergrenze eingeben: "))
geheimeZahl = randint(untergrenze, obergrenze)

zahlen = []
versuche = 0
zahl = 0

while True:
    try:
        zahl = int(input("Geben Sie eine Zahl ein: "))
        if not(untergrenze <= zahl <= obergrenze):
            print("Zahl nicht im Zahlenbereich!")
            continue
        if zahl in zahlen:
            print("Zahl schon geraten!")
            continue
        versuche += 1
        zahlen.append(zahl)
        if zahl == geheimeZahl:
            break
        elif zahl < geheimeZahl:
            print("Zu klein!")
        elif zahl > geheimeZahl:
            print("Zu groß!")
    except ValueError:
        print("Das ist keine Zahl!")
print("Geheime Zahl beim " + str(versuche) + ". Versuch gefunden!")
vote_ok
von Sleepyy (320 Punkte) - 26.08.2020 um 19:04 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 26 18:01:28 2020

@author: Robin
"""
from random import randint

inp1=0
inp2=0
liste=[]
while not inp1:
    try:
        u=int(input(">>> Untere Grenze eingeben: "))
        inp1=1
    except:
        print("")
        print(">>> Bitte nur Zahlen eingeben !!!")

while not inp2:
    try:
        o=int(input(">>> Obere Grenze eingeben: "))
        inp2=1
    except:
        print("")
        print(">>> Bitte nur Zahlen eingeben !!!")

random_zahl = randint(u,o)
print("")
print(">>> Die gesuchte Zahl befindet sich zwischen",u,"und",o)
inp = 0
i = 1
while not inp:
    try:
        zahl = int(input(">>> Zahl raten: "))
        print("")
        print(">>> Ihr",i,'.',"Versuch :",zahl)
        if zahl in liste:
            print("")
            print(">>> Sie haben es bereits schonmal mit dieser Zahl probiert !!!")
        else:
            liste.append(zahl)
        if zahl == random_zahl:
            print("")
            print(">>> Glückwunsch die von Ihnen eingegebene Zahl (",zahl,") stimmt mit der gesuchten Zahl Überein.")       
            inp = 1
        elif zahl < random_zahl:
            print("")
            print(">>> Die gesuchte Zahl ist größer.")
        else:
            print("")
            print(">>> Die gesuchte Zahl ist kleiner.")
    except:
        print("")
        print(">>> Bitte nur Zahlen verwenden !!!")
    i+=1
vote_ok
von PythonLui (400 Punkte) - 08.04.2021 um 14:36 Uhr
Quellcode ausblenden Python-Code
import random


def bereich_definieren():
    """
    Liest den Bereich zum spielen ein
    Überprüft die Eingabe
    :return: tuple(Untergrenze, Obergrenze)
    """
    while True:
        try:
            untergrenze = int(input("Bitte die Untergrenze wählen: "))
            obergrenze = int(input("Bitte die Obergrenze wählen: "))
            return untergrenze, obergrenze
        except ValueError:
            print("Bitte nur Z A H L E N eingeben!!!\n")


def eingabe_versuch(anzahl_versuche):
    """
    Liest den Versuch ein mit Überprüfung der Eingabe
    :param: int: anzahl_versuche
    :return: int: Versuch-Zahl
    """

    while True:
        try:
            if anzahl_versuche < 10:
                versuch = int(input(f"Ihr 0{anzahl_versuche}. Versuch: "))
                return versuch
            else:
                versuch = int(input(f"Ihr {anzahl_versuche}. Versuch: "))
                return versuch
        except ValueError:
            print("Bitte nur Z A H L E N eingeben.\n")


def spielen(user_bereich, zufall):
    """
    Spieldurchlauf
    :param user_bereich: tuple(int, int)
    :param zufall: int
    :return: Program ende
    """
    versuche = 0
    benutze_zahlen = []
    # Spielen solange bis erraten
    while True:
        # Variablen
        versuche += 1
        zahl_raten = eingabe_versuch(versuche)
        # Überprüfen ob die Zahl schon mal benutzt wurde
        if zahl_raten in benutze_zahlen:
            print("Mit dieser Zahl haben Sie es schon einmal Versucht!\n")
        else:
            benutze_zahlen.append(zahl_raten)
            # Prüfen welcher Hinweis oder Spiel geschafft
            if benutze_zahlen[-1] < user_bereich[0] or user_bereich[1] < benutze_zahlen[-1]:
                print("Die eingegebene Zahl befindet sich außerhalb des von Ihnen definierten Bereich.\n")
            elif benutze_zahlen[-1] < zufall:
                print("Die gesuchte Zahl ist größer.\n")
            elif benutze_zahlen[-1] > zufall:
                print("Die gesuchte Zahl ist kleiner.\n")
            elif benutze_zahlen[-1] == zufall:
                print(f"Glückwunsch die von Ihnen eingegebene Zahl ( {benutze_zahlen[-1]} ) "
                      f"stimmt mit der gesuchten Zahl überein.")
                break


def main():
    bereich = bereich_definieren()
    print(f"\nBitte erraten Sie die gesuchte Zahl, sie befindet sich zwischen {bereich[0]} und {bereich[1]}.\n")
    # Zufallszahl generieren im Ausgewählten Bereich
    zufall_zahl = random.randint(bereich[0], bereich[1])
    spielen(bereich, zufall_zahl)


if __name__ == '__main__':
    main()
1800765

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.