2016-04-15 8 views
-1

Ich lerne Python und versuche, meinen Code in Funktion.Kann Operator nicht auf Python3 zuweisen

## set total sticks number 
stick_left = 20 
## Given hints, this for statement shows sticks 
for _ in range(5): print('| '*stick_left) 
## this condition lasts until stick = 0 
while stick_left>0: 
    ## first player 
    first_player=input('Player1: please pick sticks up to 3 ') 
    if first_player>3 or first_player<0: 
     print('Please pick between 1-3 stick(s)') 
    else: 
     stick_left-=first_player 
     if stick_left<=0: 
      print ('Player1 lost') 
      break 
     else: 
      print('There is %d stick(s) left' %stick_left) ## print how many sticks left 
      for _ in range(5): print('| ' * stick_left) 
    ## second player 
    second_player = input('Player2: Please pick sticks up to 3 ') 
    if second_player > 3 or second_player < 0: 
     print('Please pick between 1-3 stick(s)') 
    else: 
     stick_left -= second_player 
     if stick_left <= 0: 
      print ('Player2 lost') 
      break 
     else: 
      print('There is %d stick(s) left' % stick_left) 
      for _ in range(5): print('| ' * stick_left) 

und dies ist mein Code enthält Funktion

player =0 
def player(): 
    for i in 2: 
     player%d %i= input('Player %d: Please pick sticks up to 3' %i) 
     if player >3 or player <0: 
      print('Please pick between 1-3 stick(s)') 

Zeile 4, ich will es player1 player2 machen drucken, aber ich merke nur, dass ich nicht Bediener so zuweisen können. Ich versuchte player_%d %i aber kein Glück. Kann mir bitte jemand einen Rat geben? Danke!

+0

Sie können keine Variable mit dem Namen 'player' und eine Funktion mit dem gleichen Namen haben – ForceBru

+0

@ForceBru Sie können, wäre es nur die Variable neu zu definieren. So würde "player" innerhalb der Funktion sich auf die Funktion beziehen, nicht "0". –

+1

@TuomasLaakkonen, so wird dies zu einem Durcheinander führen und etwas tun, das das OP nicht will – ForceBru

Antwort

4

Sie können Variablennamen im laufenden Betrieb nicht so definieren. Benutze ein Wörterbuch.

players = {} 
def player(): 
    for i in range(2): 
     players[i] = input("Player %d: Please pick sticks up to 3" % (i,)) 
     # etc 
+1

könnte auch eine 'liste' verwenden (obwohl 0 -indiziert). –

+0

In diesem Fall, sicher, obwohl es mir nicht so aussieht, als gäbe es sogar eine * Notwendigkeit * für eine separate Variable für jeden Spieler. – chepner

+0

danke für Ihren Rat! Ich werde es jetzt versuchen! – jaykodeveloper

-1

exec() Funktion wird für Sie arbeiten. Bitte beziehen Sie sich auf den folgenden Code.

player =0 
def player(): 
    for i in range(1,3): 
     exec("player%d = input('Player%d = Please pick sticks up to 3 ')" %(i,i)) 
player() 

Folgendes ist der o/p.

Player1 = Please pick sticks up to 3 1

Player2 = Please pick sticks up to 3 2

+0

Während dies funktionieren würde, bitte * bitte * nicht exec zu einem neuen Programmierer empfehlen. Hier ist eine lächerliche Menge an Fußschießen möglich. –

+0

Und das * wird * in Python 3 nicht funktionieren (obwohl es in Python 2 hätte). Wenn Sie nach der Schleife 'print (player1)' hinzufügen, wird es in Py2 funktionieren und Ihnen einen NameError in Py3 geben. – DSM

+0

Der Code wurde in Python 3.4 getestet. – PShiw