开发者

Define variables with the same list data but different objects using python

this is my code :

attackUp = [10, 15,10, 15,10, 15]
defenceUp = [10, 15,10, 15,10, 15]
magicUp = [10, 15,10, 15,10, 15]
attType = [1,1,1,1,1,1]
weightDown = [10, 15,10, 15,10, 15]

#装饰器数据
accAttackSword = [100, 100,100, 100,100, 100]
accAttackSaber = [100, 100,100, 100,100, 100]
accAttackAx = [100, 100,100, 100,100, 100]
accAttackHammer = [100, 100,100, 100,100, 100]
accAttackSpear = [100, 100,100, 100,100, 100]
accAttackFight = [100, 100,100, 100,100, 100]

accAttackBow = [100, 100,100, 100,100, 100]
accAttackMagicGun = [100, 100,100, 100,100, 100]
accAttackMagic = [100, 100,100, 100,100, 100]
mStrInstrument = [100, 100,100, 100,100, 100]
mStrCharms = [100, 100,100, 100,100, 100]
accDefencePhy = [100, 100,100, 100,100, 100]
accDefenceMag = [100, 100,100, 100,100, 100]
accWeight = [100, 90, 0, 0, 100, 90]

#战术书数据
bookTurn = [1,1]
bookAttackPhy = [100, 100]
bookAttackMag = [100, 100]
bookStrInstrument = [100, 100]
bookStrCharms = [100, 100]
bookDefencePhy = [100, 100]
bookDefenceMag = [100, 100]
bookWeight = [100, 100]

you can see that : Many variables has the same value , but i cant define them like this :

bookAttackPhy = bookAttackMag =bo开发者_如何学CokStrInstrument=bookStrCharms=bookDefencePhy=[100, 100]

because all change if one of them changes.

Which is the best and easiest to define these variables?


Well, a step in the right direction would be to create a base list and then copy it using slice notation:

base = [100, 100, 100, 100]
value_a = base[:]
value_b = base[:]

and so on. This doesn't gain you much for the shorter lists, but it should be useful for the longer ones at least.

But I think more generally, a richer data structure would be better for something like this. Why not create a class? You could then use setattr to fill up class members in a fairly straightforward way.

class Weapons(object):
    def __init__(self, base):
        for weapon in ["saber", "sword", "axe"]:
            setattr(self, weapon, base[:])

w = Weapons([100, 100, 100])
print w.__dict__  

#output: {'sword': [100, 100, 100], 
#         'saber': [100, 100, 100], 
#         'axe': [100, 100, 100]}

w.axe[0] = 10
print w.axe       # output: [10, 100, 100]
print w.sword     # output: [100, 100, 100]


Define them all as empty arrays, then group the ones that need the same values into a list and iterate through that list, assigning the common values to each variable.


You could do something like:

defaultAttack = [100, 100,100, 100,100, 100]
accAttackSword = list(defaultAttack)
accAttackSaber = list(defaultAttack)

The list() constructor makes a copy of the list, so they will be able to change independently.


You can use list multiplication

accAttackSword = [100]*6
....
bookWeight = [100]*2
....

You might consider grouping all of the variables with similar prefixes either into dictionaries or nested lists (EDIT - or classes/objects). This could have benefits later for organization, and would allow you to iterate thru and set them all to the same initial values.

bookVars = ['AttackPhy', 'AttackMag', 'StrInstrument', 'StrCharms']
bookValues = dict()
for i in bookVars:
    bookValues[i] = [100]*2

And to access...

bookValues
  {'AttackMag': [100, 100], 'StrCharms': [100, 100], 'StrInstrument': [100, 100], 'AttackPhy': [100, 100]}
bookValues['AttackMag']
  [100, 100]

EDIT - check out senderle's thing too. at a glance his seems a little better, but id definitely consider using one of our ideas - the point is to structure it a little more. whenever you have groups of variables with similar prefixed names, consider grouping them together in a more meaningful way. you are already doing so in your mind, so make the code follow!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜