2017-05-24 1 views
0

Ich renne in "out of range", während ich die Eingabe und die Eingabe einzelner Wörter drücke. Ich verstehe, warum sie außer Reichweite sind, ich kann einfach nicht finden, wie man das Problem behebt. dies ist mein Code:Listenindex außerhalb des Bereichs.splitten am Eingang?

commands = { 
'help': help, 
'exit': exit, 
'look': look, 
'stats': thePlayer.printStats, 
's':thePlayer.move_South} 

def runCmd(cmd, args, player): 
    commands[cmd](args, player) 

def help(args): 
    print(commands) 

def play(): 
    main1() 
    World.loadTiles() 
    #These lines load the starting room and display the text 
    room = World.tileExists(player.locationX, player.locationY) 
    print(room.introText()) 
    while player.isAlive(): 
     room = World.tileExists(player.locationX, player.locationY) 
     room.modifyPlayer(player) 
     # Check again since the room could have changed the player's state 
     if player.isAlive(): 
      print("\nHp:%d\%d Mp:%d\%d\n"%(player.hp,player.maxHp,player.mp,player.maxMp)) 
      print(room.printEnemy()) 
      availableActions = room.availableActions()    
      for action in availableActions: 
       print(action) 
      actionInput = input('Action: ') 
      action = actionInput.lower() 
      action = action.split()    
      print(action) 
     if action[0] in commands: 
      runCmd(action[0],action[1], player) 

Ich weiß, ich nicht eine „Aktion [1]“ bin vorbei und geben Sie einfach schlagen ist nicht in „Befehle“ verursacht mein Fehler. Ich bin neu in der Programmierung, also ist es ein Spiel, wie ich mich selbst unterrichte.

Ich versuche zu erreichen, wo ich tippen kann: eingeben, einzelnes Wort (Hilfe, Statistiken), Doppelwörter (siehe Ratte), andere Dinge mit mehr Worten (kaufen großes Schwert) und so weiter. jede Hilfe, wie ich das richtig schreiben kann?

Antwort

0

Wie zum Testen

len(action) 

vor runcmd Aufruf? So können Sie wissen, ob es ein Wort, zwei Wörter oder mehr als zwei Wörter gibt. Wenn nur ein Wort ist, kann man nennen:

runCmd(action[0], None, player) 

Wenn es zwei Wörter sind, können Sie Ihre aktuelle Funktion aufrufen. Wenn es mehr als zwei Wörter gibt, ist es ein bisschen schwierig. Sie können die gesamte Aktionsvariable übergeben. Dann muss die aufgerufene Funktion wissen, wie viele Parameter benötigt werden.

+0

das wäre eine sehr brutale Methode, um es zum Laufen zu bringen. aber das würde 20 mal zusätzlichen Code hinzufügen, von dem ich sicher bin, dass er vereinfacht werden kann. Ich weiß, dass es ein * Args gibt, das ich weitergeben könnte, das stattdessen (wie ich weiß) als meine Argumente weitergeben werde, wie ich will, aber ich weiß nicht, wie genau ich es noch benutzen soll. – Reederboard

+0

Ich habe noch nie den Splat-Operator benutzt, also kann ich dir nicht helfen. Vielleicht finden Sie hier Hinweise (https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/). Es ist Python 2, aber ich denke, es funktioniert auch in Python 3. – Abrikot

Verwandte Themen