Ich lerne seit fast drei Monaten in einem Kurs Python und habe die Grundlagen verstanden, glaube ich. Aber manchmal stehe ich ein bisschen an. Ich habe den folgenden Code für das Spiel Craps und soll mir überlegen, warum das so gelöst wurde mit "Iterable".
import random
from typing import Iterable
def craps(throws: Iterable):
die = iter(throws)
first_sum = next(die) + next(die)
if first_sum in (7, 11):
return True
if first_sum in (2, 3, 12):
return False
while True:
next_sum = next(die) + next(die)
if next_sum == 7:
return False
if next_sum == first_sum:
return True
# some tests
assert craps([6, 5])
assert not craps([5, 5, 1, 6])
assert craps([5, 5, 4, 6])
# now, a random die
def random_throws():
while True:
r = random.randint(1, 6)
yield r
rounds = 1000
outcomes = [craps(random_throws()) for _ in range(rounds)]
print(rounds, "rounds played, won", sum(outcomes))
Ich habe glaube ich verstanden was Iterable bedeutet. Aber warum macht man das so in diesem Programm ? Warum nicht einfach eine Liste von Zahlen in die Funktion ? Das "yield" verstehe ich eigentlich nicht .