2017-10-12 9 views
0

Ich schaute durch this post versuchte herauszufinden, wenn eine bestimmte Zeichenfolge einen bestimmten Wert in einem Wörterbuch entspricht, aber es wirft nichts zurück. Ich habe ein Wörterbuch mit Wörterbüchern und ich versuche herauszufinden, wie ich, sagen wir, wenn eine Zeichenfolge gegeben 'warrior', durch das Wörterbuch, gehen Sie in das Unterwörterbuch, überprüfen Sie die name Schlüssel für die angegebene Zeichenfolge, und wenn es existiert , gib die Klasse zurück. Das ist mein Code.Python Iterieren durch Wörterbuch, bestimmen, ob die angegebene Zeichenfolge mit einem beliebigen Namen übereinstimmt

classes.py

#import playerstats 
from player import playerStats 

def setClass(chosenClass): 
    chosenClass = chosenClass.upper() 
    #function from post 
    """print ([key 
       for key, value in classes.items() 
       if value == chosenClass])""" 
    #this returns nothing 
    for key, value in classes.items(): 
     if value == chosenClass: 
      print(classes[chosenClass][value]) 
    #also returns nothing 
    for i in classes: 
     if classes[i]["name"] == chosenClass: 
      print('true') 

#create classes 
classes = { 
    'WARRIOR': { 
     #define name of class for reference 
     'name': 'Warrior', 
     #define description of class for reference 
     'description': 'You were born a protector. You grew up to bear a one-handed weapon and shield, born to prevent harm to others. A warrior is great with health, armor, and defense.', 
     #define what the class can equip 
     'gearWeight': ['Cloth', 'Leather', 'Mail', 'Plate'], 
     #define stat modifiers 
     'stats': { 
      #increase, decrease, or leave alone stats from default 
      'maxHealth': playerStats['maxHealth'], 
      'stamina': playerStats['stamina'] * 1.25, 
      'resil': playerStats['resil'] * 1.25, 
      'armor': playerStats['armor'] * 1.35, 
      'strength': playerStats['strength'] * 0.60, 
      'agility': playerStats['agility'], 
      'criticalChance': playerStats['criticalChance'], 
      'spellPower': playerStats['spellPower'] * 0.40, 
     } 
    } 
} 

player.py

import random 
import classes 

#set starter gold variable 
startGold = random.randint(25,215)*2.5 
#begin player data for new slate 
playerStats = { 
    'currentHealth': int(100), 
    'maxHealth': int(100), 
    'stamina': int(10), 
    'resil': int(2), 
    'armor': int(20), 
    'strength': int(15), 
    'agility': int(10), 
    'criticalChance': int(25), 
    'spellPower': int(15), 
    #set gold as random gold determined from before 
    'gold': startGold, 
    'name': {'first': 'New', 'last': 'Player'}, 
} 

Was kann ich tun, um es durch das Wörterbuch suchen, und wenn chosenClass ein bestehendes Klasse-Wörterbuch ist, return true oder Rückkehr der Wörterbuch?

+0

Sie Groß chosenclass. Großbuchstaben [i] ["name"] auch. – Neo

+0

Und BTW können Sie auch einfach iterieren über classes.values ​​() – Neo

+2

Warum vermeiden nicht einfach Iterieren und Index nach 'Klassen [Schlüssel]' d. H. "WARRIOR"? –

Antwort

1
.... 
    #this returns nothing 
    for key, value in classes.items(): 
     if value == chosenClass: 

Ich denke, Sie sollten in dieser Schleife die key-chosenClass anstelle des value werden verglichen. Ein einfaches Werkzeug zur Fehlerbehebung ist Sachen zu sehen zu drucken, was

.... 
    #this returns nothing 
    for key, value in classes.items(): 
     print('key:{}, value:{}, chosenClass:{}'.format(key, value, chosenClass) 
     if value == chosenClass: 

geschieht Aber vielleicht einen einfacherer Weg, es zu tun ist:

def setClass(chosenClass): 
    chosenClass = chosenClass.upper() 
    chosen = classes.get(chosenClass, False) 
    return chosen 
+0

Nur neugierig, was macht das Hinzufügen von 'False'? –

+0

Wenn 'selectedClass' nicht in' classes' ist, wird '.get()' '' False' zurückliefern, welches 'selected' zugewiesen wird .https: //docs.python.org/3/library/stdtypes.html# dict.get – wwii

Verwandte Themen