2017-03-23 4 views
0

Warum wird current_score in der while-Schleife nicht aktualisiert? Beim erstmaligen Posten konnte die Antwort online nicht gefunden werden. Ich denke, es ist eine Scoping-Ausgabe halpVariable wird nicht in while-Schleife aktualisiert

def main(): 
    player_1 = input("Player one: ") 
    player_1_score = 0 
    player_2 = input("Player two: ") 
    player_2_score = 0 
    num_sets = int(input("Points for a win: ")) 
    current_score = "%s (%i : %i) %s" % (player_1, player_1_score, player_2_score, player_2) 

    while player_1_score <num_sets> player_2_score: 
     round = int(input("Who won this round? (type 1 for player one; type 2 for player two")) 
     if round == 1: 
      player_1_score += 1 
     else: 
      player_2_score += 1 

    print(current_score) 
pass 

if __name__ == '__main__': 
    main() 
+0

Wo sehen Sie es anweisen, zu aktualisieren. Beachten Sie, dass die Formatierung von Strings wie '...% ...' einmal ausgewertet wird ** ... –

Antwort

1

Try this:

current_score = "%s (%i : %i) %s" 

while something: 
    # do the update 
    print(current_score % (player_1, player_1_score, player_2_score, player_2)) 

Hier current_score ist nur ein String, der die Formatbezeich enthält. All die Magie passiert, wenn Sie diese format_string % (data) Syntax darauf anwenden. Dann erhalten Sie eine neue Zeichenfolge, die die formatierte Ausgabe enthält.

+0

Das ist ziemlich schlau. Bedeutet das, dass '%' nur die aktuellen Werte in einer String-Variablen speichert? Und wenn ich diese Variable wiederverwende, gibt es mir nur die Zeichenfolge "% s (% i:% i)% s"% (player_1, player_1_score, player_2_score, player_2) – qutija

+0

@qutija, ziemlich genau: die '% s' und '% i' selbst sind lediglich Formatbezeichner (dh nur Zeichen). – ForceBru

0

Sie haben aktuellen Punktestand mit den neuen Werten neu zu initialisieren, nachdem die neuen Werte in der Schleife gesetzt werden vor dem Druck aus:

def main(): 
player_1 = input("Player one: ") 
player_1_score = 0 
player_2 = input("Player two: ") 
player_2_score = 0 
num_sets = int(input("Points for a win: ")) 
current_score = "%s (%i : %i) %s" % (player_1, player_1_score, player_2_score, player_2) 

while player_1_score <num_sets> player_2_score: 
    round = int(input("Who won this round? (type 1 for player one; type 2 for player two")) 
    if round == 1: 
     player_1_score += 1 
    else: 
     player_2_score += 1 

    current_score = "%s (%i : %i) %s" % (player_1, player_1_score, player_2_score, player_2) 
    print(current_score) 
pass 

if __name__ == '__main__': 
    main() 
Verwandte Themen