@KaterKarlo: Noch zum Quelltext: Schau mal in den
Style Guide for Python Code bezüglich der Namensschreibweisen.
Mir kam das als Thema auch so verdammt bekannt vor, und richtig 2007 hatten wir schon einmal russisches Roulette im Thema
Bin ich zu dumm zum programmieren?. Der Benutzer hatte die Aufgabe Vom Hackerboard-Unterforum „Programmieraufgaben“ aus dem Beitrag
Russisches Roulette von 2004.
Meine Lösung in dem Thema hier im Forum würde ich dann mal in dieses Jahrzehnt holen wollen:
Code: Alles auswählen
#!/usr/bin/env python3
from random import randint
from time import sleep
import rich
from attr import attrib, attrs
from rich.panel import Panel
from rich.prompt import Confirm
from rich.rule import Rule
from rich.status import Status
class GermanConfirm(Confirm):
validate_error_message = "[prompt.invalid]Bitte J oder N eingeben"
choices = ["j", "n"]
@attrs
class Revolver:
chamber_count = attrib(default=6)
pulls_till_bang = attrib(default=None)
pulls_since_last_spin = attrib(default=None)
def spin(self):
self.pulls_till_bang = randint(1, self.chamber_count)
self.pulls_since_last_spin = 0
__attrs_post_init__ = spin
def pull_trigger(self):
self.pulls_till_bang -= 1
self.pulls_since_last_spin += 1
return self.pulls_till_bang == 0
def play(computer_starts=False):
humans_turn = not computer_starts
revolver = Revolver()
while True:
rich.print(Rule())
if humans_turn:
rich.print(":man: Spieler am Zug")
spin = GermanConfirm.ask("Trommel drehen? ")
else:
rich.print(":robot: Computer am Zug")
spin = (
revolver.pulls_since_last_spin >= revolver.chamber_count * 0.66
)
if spin:
with Status("Die Trommel dreht sich..."):
revolver.spin()
sleep(1)
if revolver.pull_trigger():
rich.print("[bold red]:boom: [blink]PENG!!![/blink] :boom:")
return humans_turn
rich.print("*klick*")
humans_turn = not humans_turn
def main():
human_starts = GermanConfirm.ask("Soll der Computer anfangen? ")
human_is_dead = play(human_starts)
rich.print(
Panel(
"Du bist tot. :skull:"
if human_is_dead
else "Der Computer ist tot. :smiley:",
title="Ergebnis",
)
)
if __name__ == "__main__":
main()
Damals wurde das Thema
Funktionale Sprachen aus dem Ursprungsthema abgetrennt, wo es auch mindestens eine Lösung in OCaml und zwei in Haskell gibt, beziehungsweise gab, denn die wurden damals nicht im Forum selbst, sondern im Pastebin von Pocoo.org abgelegt, das leider tot ist.