2017-05-14 4 views
-1

ich ein Wendung basiertes Kampfsystem für ein kleines Spiel zu schaffen, und ich bin Empfangen des FehlersTypeerror: Objekt vom Typ ‚Typ‘ hat keine len()

TypeError: object of type 'type' has no len()

in der Zeile:

AImove = random.choice(AImove) 

als Referenz die AImove Variable wird wie folgt festgelegt:

AImove = [1,2] 

ich habe versucht,hinzufügenund AImove = str in den Code, aber ich entweder den gleichen Fehler wie zuvor oder "TypeError: object of type 'int' has no len()"

Die Funktion, wo AImove verwendet wird, erscheint unten, eine Rückmeldung würde geschätzt werden.

def combat(health, turn, loop, gold, AImove): 

    enemy_health = (random.choice(random_enemy_Health)) 
    enemy_attack = (random.choice(random_enemy_Attack)) 
    print("\nYou are fighting a" ,random.choice(enemies), "with an attack amount of" ,enemy_attack, "and a health amount of" ,enemy_health,".") 
    while health > 0 and enemy_health > 0: 
     if turn == 1: 
      while loop == False: 
       print("\nDo you want to attack or flee? Type '1' to attack and '2' to flee.") 
       response=input() 
       if response == "1": 
         enemy_health = enemy_health - attack 
         print("You attacked!") 
         loop = True      
       elif response == "2": 
        hub_travel() 
        print ("You fled the battle, come back once you are stronger!") 
        loop = True 
       else: 
        print ("Invalid number, try again") 
        continue 
      turn = 2              

     if turn == 2: 
       AImove = random.choice(AImove) 
       if AImove == 1: 
        print ("Enemy attacked!") 
        health = health - enemy_attack 
       if AImove == 2: 
        print("Enemy missed!") 
       turn = 1              
       continue 
+1

'AImove = random.choice (AImove)' Sobald dieser Code ausgeführt wird, wird der Name 'AImove' bezieht sich nicht mehr auf die ursprüngliche Liste, sondern die gewählte ganze Zahl. Wenn Sie das zweite Mal versuchen, auszuführen, erhalten Sie den Fehler. –

+0

Wie würde ich die gleiche Funktionalität beibehalten, aber den Fehler beseitigen? Die zufällige Auswahl muss dort bleiben. – lg99

+1

Verwenden Sie einen anderen Namen, beispielsweise: 'AIchoice = random.choice (AImove)' –

Antwort

1

Sie sofort ersetzen AImove mit dem Ergebnis der random.choice, danach ist es entweder 1 oder 2 und in der nächsten Iteration Sie random.choice(1) versuchen (oder 2), die die Ausnahme erklären Sie gesehen haben.

Sie könnten einfach einen anderen Variablennamen dort verwenden:

# ... 
AImove_this_turn = random.choice(AImove) 
if AImove_this_turn == 1: 
    print ("Enemy attacked!") 
    health = health - enemy_attack 
if AImove_this_turn == 2: 
    print("Enemy missed!") 
turn = 1              
continue 
Verwandte Themen