2017-05-12 2 views
0

Also habe ich einen Teil meines Würfelspiels Code neu gemacht und es funktioniert etwas anständig, aber nach ROLL'ing die Würfel und versuche, die Benutzer-Score anzuzeigen, renne ich in einen Fehler wo ist sagt 'Name p1_score ist nicht definiert '. Das Gleiche gilt für die Variable p2_score. Allerdings habe ich p1_score als ran_num + ran_num definiert, weshalb ich nicht verstehe, warum ich einen Fehler bekomme.anscheinend ran_num ist nicht definiert

import random 
import time 

player_1 = input("") 
player_2 = input("") 

def rollDice(player_1): 
     ran_num = random.randint(1,6) 
     if ran_num == 1: 
      print("You rolled a",ran_num) 
     else: 
      print("You rolled a",ran_num) 
     p1_score = ran_num+ran_num 


def rollDice(player_2): 
     ran_num = random.randint(1,6) 
     if ran_num == 1: 
      print("You rolled a",ran_num) 
     else: 
      print("You rolled a",ran_num) 
     p2_score = ran_num+ran_num 


print("Please press ENTER to roll the dice") 
input() 
rollDice(player_1) 
print("Good job",player_1,) 
print("Your score is now",p1_score) 
time.sleep(5) 
print(player_2,"Press ENTER to roll the dice") 
input() 
rollDice(player_2) 
print("Nice work",player_2) 
print("Your score is now",p2_score) 

def main(): 
    rollDice(player1, player2) 

main() 
+0

Diese Variablen sind lokal für die Funktion. Sie müssen sie an den Code zurückgeben, der sie aufruft. – Carcigenicate

+0

Ich verstehe nicht, was Sie damit meinen? – johnny2945

+0

Weißt du, was 'return' macht? – Carcigenicate

Antwort

4

Dies ist eine Variable Scoping Problem, müssen Sie entweder eine globale verwenden (Globals kann gefährlich sein, wenn falsch verwendet) auf die gleiche Weise mit player_1 und player_2 haben oder Rückkehr von dieser Funktion und verwenden Sie den Rückgabewert für die Ausgabe.

http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html

import random 
import time 

def rollDice(): 
    ran_num = random.randint(1,6) 
    print("You rolled a " + str(ran_num)) 
    raw_input() 
    resolved_score = ran_num+ran_num 
    return str(resolved_score) 

player_1 = raw_input("Enter player one name: ") 
player_2 = raw_input("Enter player two name: ") 

print("Please press ENTER to roll the dice") 
raw_input() 
p1_result = rollDice() 

print("Good job "+player_1) 
print("Your score is now "+p1_result) 
time.sleep(5) 

print(player_2+" Press ENTER to roll the dice") 
raw_input() 
p2_result = rollDice() 

print("Nice work "+player_2) 
print("Your score is now "+p2_result) 

„Nicht mit dieser Website verbundenen, haben nur eine schnelle Google, um zu sehen, ob ich eine Ressource finden könnte für Sie so zu lesen, können Sie verstehen,“ Ich habe rationalisiert Ihre Code ein bisschen, es gab einige logische Fehler. Beachten Sie, dass ich in der Def-Anweisung eine return-Anweisung habe, die return-Anweisung addiert zwei Zahlen zusammen, konvertiert sie in eine Zeichenfolge mit str() und ich benutze RETURN, um den Wert zurück in den aufrufenden Code auszuspucken. In diesem Fall wird der anrufende Code zuerst begegnet, wo wir sehen:

p1_result = rollDice() 

Jetzt wird gleich p1_result unabhängig von der ran_num + ran_num zu innerhalb der Funktion aufgelöst.

+1

** ABER ** bevorzugen Globals, wenn die Alternative * wirklich * chaotisch ist. Bevorzugen Sie wann immer möglich. – Carcigenicate

+0

Einverstanden, er scheint verwirrt darüber zu sein, was eine "Return" -Anweisung eigentlich ist, also müsste ich vielleicht ein Beispiel für ihn aufschreiben. –

+0

Wenn du mir ein Beispiel geben könntest das wäre toll :) – johnny2945