Programm macht gar nichts.

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
mm96
User
Beiträge: 30
Registriert: Donnerstag 26. November 2020, 23:24

Hi Leute,

bin neu in Python und hab mal versucht über verschiedene Tutorials nen Fuß in die Tür zu bekommen.
Dabei hab ich kleine Programme gemacht, die in etwa Zinsen auf der Bank berechnen und so...

Dieser Code allerdings wirft jetzt einfach überhaupt kein Ergebnis aus und ich weiß nicht warum, über die Forensuche
und Google hab ich auch nix gefunden, liegt aber vllt auch daran, dass ich zu wenig weiß nach was ich eigentlich suchen muss.

Code: Alles auswählen


#!/usr/bin/python
# -*- coding:utf-8 -*-

from random import randrange  

würfe=[]
wurfzahl=len(würfe)
augensumme=sum(würfe)

while augensumme < 100:
    wurf=randrange(1,7,1)
    würfe.append(wurf)
   

print(wurfzahl)
input()

Das Ziel ist, so oft einen Würfel zu werfen, bis die Augensumme 100 überschreitet. Dann soll ausgegeben werden, wie viele Würfe man gemacht hat.

Würde mich sehr über eine Antwort freuen.

Viele Grüße,
mm
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du nur würfelst, aber nie wieder summierst- wie soll da deine Bedingung jemals erfüllt werden?

Gleiches gilt auch für die Anzahl.

Ein Ausdruck der einen Wert einem Namen zuweist wird nicht bei jeder Gelegenheit wieder ausgewertet. Sondern nur einmal.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`randrange()` ist auch ein bisschen undurchsichtig. `randint()` hätte viel verständlichere Argumente hier.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6870
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@mm96
Du denkst da irgendwie falsch herum. Es bringt nichts, wenn du vorher Variablen initialisierst und dann hoffst, dass die im Programmlauf automatisch auf den aktuellen Stand gebracht werden. Das musst du schon explizit in das Programm einbauen. Also eher so:

Code: Alles auswählen

from random import randint

def gib_würfe_für(zielsumme):
    würfe = []
    while sum(würfe) < zielsumme:
        würfe.append(randint(1, 6))
    return würfe

def main():
    würfe = gib_würfe_für(10)
    print(f"Es wurden {len(würfe)} Würfe benötigt:")
    print(würfe)
    print(f"Summe aller Augen: {sum(würfe)}")

if __name__ == "__main__":
    main()
Wie du siehst, finden die Funktionsaufrufe immer *nach* den Berechnungen statt. Das sum() im Kopf der while-Schleife wird dabei für jeden Durchgang der Schleife neu aufgerufen, sodass ein entsprechend aktualisiertes Ergebnis ermittelt wird.

Ich glaube, du musst dir noch darüber im Klaren werden, wie ein Programm "denkt", also wie es technisch gesehen abläuft im Hinblick auf den Programmfluss. Der Python-Interpreter geht ein Skript halt anders durch als es ein gewöhnlicher (nicht programmierender) Mensch tun würde.

EDIT:
Man könnte die Augen auch händisch aufaddieren, sodass sum() nicht immer alles von vorn berechnet. Das habe ich hier aber mal vernachlässigt, weil das in diesen Größenordnungen nicht wirklich Einfluss auf die Performance des Programms hat und die bessere Lesbarkeit mir hierbei wichtiger war.
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

außerdem wird hier noch Python 2 verwendet - das ist seit 1.1.2020 ohne Support durch die Python-Entwickler. Nutze Python 3. Das Programm läuft so auch 1:1 unter Python 3.

Welchen tieferen Sinn hat den das `input` am Ende des Codes? Falls das nur dazu da ist, den Terminal offen zu halten -> starte das Programm in einem offenen Terminal.

Gruß, noisefloor
mm96
User
Beiträge: 30
Registriert: Donnerstag 26. November 2020, 23:24

Hi Leute,

vielen Dank für die Hilfen, hat einiges geradegerückt!
Ich mach nochmal son paar kleine Spielereien nach Eurem Beispiel um den Ablauf besser reinzukriegen und benutz 'n anderes Terminal.

Herzliche Grüße,
mm96
Antworten