Python Beginner - Schleifenfrage

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
132
User
Beiträge: 2
Registriert: Montag 25. Januar 2021, 11:57

Moin!

Ich bin vor ein paar Tagen mit der Python Programmierung angefangen. Ich bin krankheitsbedingt zuhause und möchte nicht den ganzen Tag blöd rumsitzen, sondern die Zeit nutzen, um was sinnvolles zu lernen.
Ich habe in der Schule bereits im Rahmen einer AG Mindstorms Roboter mit der Sprache NXC programmiert, da gibts schon viele Parallelen . Das ganze ist aber auch schon ein paar Jährchen her und ich bin nicht mehr voll drin 😁

Folgendes Problem: Ich habe als Übungsaufgabe n Ratespiel programmiert. PC soll zufällige Zahl generieren, User soll Zahl erraten und eingeben. Am Anfang frag ich, wieviele Runden man spielen möchte. Was mir nun fehlt: Am Ende des Spiels soll gefragt werden, ob man erneute spielen möchte (also auch Rundenanzahl wieder abfragen). Ich würde erstmal auf eine While Schleife tippen, weiß aber einfach nicht, wie ich diese mit der Fragestellung ,,Möchten sie nochmal spielen?" integrieren soll.

Code: Alles auswählen

import random

wins = 0
rounds = 0
wins = 0
loose = 0
roundstoplay = int(input("Wieviele Runden möchtest du spielen? "))

for x in range(roundstoplay):
    playernumber = int(input("Bitte gib eine Zahl zwischen 1-5 ein. "))
    computernumber = random.randint(1,5)

    if playernumber == computernumber:
        print("Richtig! Du hast gewonnen! Die Zahl war " + str(computernumber) + ".")
        rounds += 1
        wins += 1

    else:
        print("Leider verloren! Die Zahl war " + str(computernumber) + ".")
        rounds += 1
        loose += 1

print("Das Spiel ist zuende! Du hast " + str(rounds) + " Runden gespielt.\nDavon hast du " + str(wins) + " gewonnen und " + str(loose) + " mal verloren")

Ich hoffe, dass die Frage hier nicht schon irgendwie ist und hoffe, dass ihr mir helfen könnt! 😁
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@132: ``while`` ist in der Tat die richtige Schleife für so etwas. Da die Bedingung nicht am Schleifenanfang geprüft werden kann, da die Frage an den Benutzer erst am Ende kommt, nimmt man eine ”Endlosschleife” (``while True:``) und bricht die mit ``break`` ab wenn der Benutzer nicht mehr weiterspielen möchte.

Zum Code: `wins` hast Du zweimal mit 0 initialisiert. Von `rounds`, `wins`, und `loose` braucht man nur zwei, weil egal welche zwei man nimmt, das dritte kann man leicht aus den anderen beiden berechnen.

Worte in Namen werden durch Unterstriche getrennt. Das macht es leichter sie zu lesen wenn man die Trennung nicht im Kopf vornehmen muss. `roundstoplay` kann man beispielsweise auch als „round stop lay“ lesen bis einem beim „lay“ auffällt, dass man wohl falsch getrennt hat.

Statt `rounds` manuell zu verwalten und `x` überhaupt nicht zu verwenden, könnte man eine Schleife über die aktuelle Rundenzahl schreiben (``for round in range(1, rounds_to_play + 1):``.

Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.

Code: Alles auswählen

#!/usr/bin/env python3
import random


def main():
    while True:
        rounds_to_play = int(input("Wieviele Runden möchtest du spielen? "))

        win_count = 0
        for _ in range(rounds_to_play):
            player_number = int(
                input("Bitte gib eine Zahl zwischen 1-5 ein: ")
            )
            computer_number = random.randint(1, 5)

            if player_number == computer_number:
                print("Richtig! Du hast gewonnen!", end=" ")
                win_count += 1
            else:
                print("Leider verloren!", end=" ")

            print(f"Die Zahl war {computer_number}.")

        print(
            f"Das Spiel ist zuende! Du hast {rounds_to_play} Runden gespielt.\n"
            f"Davon hast du {win_count} gewonnen"
            f" und {rounds_to_play - win_count} mal verloren"
        )


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
132
User
Beiträge: 2
Registriert: Montag 25. Januar 2021, 11:57

__blackjack__ hat geschrieben: Montag 25. Januar 2021, 14:35 @132: ``while`` ist in der Tat die richtige Schleife für so etwas. Da die Bedingung nicht am Schleifenanfang geprüft werden kann, da die Frage an den Benutzer erst am Ende kommt, nimmt man eine ”Endlosschleife” (``while True:``) und bricht die mit ``break`` ab wenn der Benutzer nicht mehr weiterspielen möchte.

Zum Code: `wins` hast Du zweimal mit 0 initialisiert. Von `rounds`, `wins`, und `loose` braucht man nur zwei, weil egal welche zwei man nimmt, das dritte kann man leicht aus den anderen beiden berechnen.
Das stimmt, hatte ich so nicht bedacht. Danke für den Tipp!

Die anderen Tipps muss ich mir mal genauer anschauen... Stehe wie gesagt noch am Anfang und habe bei weitem nicht alle Befehle im Kopf. Werd aber mal ein bisschen rumprobieren.

Danke für die Hilfe! 😁
Antworten