![]() |
|
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Programming Guru
![]() Join Date: Apr 2005
Posts: 1,825
Rep Power: 5
![]() |
How do I check...
...for the existance of a certain variable/class?
How do I make the program flow execute a certain piece of code if it finds a certain variable to be existant, or a certain class to have been called? Because I don't want to check the condition of something that doesn't have a value. |
|
|
|
|
|
#2 |
|
Newbie
Join Date: Feb 2005
Posts: 24
Rep Power: 0
![]() |
You could do something like:
if vars().has_key("x"):
# Do something |
|
|
|
|
|
#3 |
|
Hobbyist Programmer
|
yeah, go ahead and see if it has a value, if it doesnt, it'll throw a NameError or somthing similar
|
|
|
|
|
|
#4 |
|
Programming Guru
![]() Join Date: Apr 2005
Posts: 1,825
Rep Power: 5
![]() |
This is a video game, I don't want it throwing up an error whenever you start a battle with only 2 of your 4 characters battling. T_T
|
|
|
|
|
|
#5 |
|
Programmer
Join Date: Feb 2005
Posts: 54
Rep Power: 4
![]() |
How about a more concrete example? For instance, do you have a list of characters that you can iterate through?
if len(charlist) < 4: # show a warning if char1 == None or char2 == None: # show a warning |
|
|
|
|
|
#6 |
|
Programming Guru
![]() Join Date: Apr 2005
Posts: 1,825
Rep Power: 5
![]() |
import random
def figure_exp(lvl):
experience = 0
for a in range(1, lvl+1):experience += (a/2*500 + a*10)
b = str(experience)
return b
def return_turns(party, enemy, ratio):
"""Declare an array of values carrying the character
number and speed, for all characters"""
SpeedSet = []
Set = []
for a in range(len(party)):
Set.append(10*party[a][1]+party[a][0])
b= Set[a]
SpeedSet.append(b)
Set = []
for a in range(len(enemy)):
Set.append(10*enemy[a][1]+enemy[a][0])
b= Set[a]
SpeedSet.append(b)
"""Sort from greatest to least to more easily manage"""
SpeedSet.sort()
SpeedSet.reverse()
"""Assign a ratio value based on the difference from
the maximum speed, including the ratio value inputted
in the main function argument"""
NewSet = []
for a in range(len(SpeedSet)):
NewSet.append( int((( float( int( str(max(SpeedSet)) [:len(str(max(SpeedSet)))-1] ) - int( str(SpeedSet[a]) [:len(str(SpeedSet[a]))-1] )) / (int(max(SpeedSet))/ratio)+1) *100)+1 ))
"""Eliminate odd ratio values"""
for a in range(len(NewSet)):
if NewSet[a]%2 == 0:
NewSet[a]+=1
"""Assign turns based on the divisibility of one's ratio"""
Turns = []
for b in range(10000):
for a in range(len(NewSet)):
if (b+1)%NewSet[a] == 0: Turns.append(int(str(SpeedSet[a])[len(str(SpeedSet[a]))-1]))
"""End function"""
return Turns
#################################################################
player1 = 0
player2 = 0
enemy1 = 0
enemy2 = 0
for a in range(len(Turns)):
if Turns[a] == "1": player1 += 1
if Turns[a] == "2": player2 += 1
if Turns[a] == "3": enemy1 += 1
if Turns[a] == "4": enemy2 += 1
print "Player 1: Gets %d Turns, With %s Speed."%(player1, str(party[0][1]))
print "Player 2: Gets %d Turns, With %s Speed."%(player2, str(party[1][1]))
print "Enemy 1: Gets %d Turns, With %s Speed."%(enemy1, str(enemy[0][1]))
print "Enemy 2: Gets %d Turns, With %s Speed."%(enemy2, str(enemy[1][1]))
print Turns
#################################################################
class battle_object (object):
def __init__(self, stats):
self.name = stats[0]
self.level = stats[1]
if len(stats) == 15:
self.curHP = stats[3]
self.maxHP = stats[2]
self.curMP = stats[5]
self.maxMP = stats[4]
self.strength = stats[6]
self.defense = stats[7]
self.agility = stats[8]
self.luck = stats[9]
self.accuracy = stats[10]
self.experience = stats[11]
self.weapon = stats[12]
self.armor = stats[13]
self.magic = stats[14]
elif len(stats) == 10:
self.curHP = stats[2]
self.maxHP = stats[2]
self.curMP = stats[3]
self.maxHP = stats[3]
self.strength = stats[4]
self.defense = stats[5]
self.agility = stats[6]
self.luck = stats[7]
self.accuracy = stats[8]
self.magic = stats[9]
self.experience = '';self.weapon = '';self.armor = ''
else: print len(stats)
def attack(self, target):
target.curHP -= self.strength
def battle (party, enemy, area):
p = []
if len(party) > 0: character0 = battle_object(party[0]);p.append([0, character0.agility]);characters=1
if len(party) > 1: character1 = battle_object(party[1]);p.append([1, character1.agility]);characters=2
if len(party) > 2: character2 = battle_object(party[2]);p.append([2, character2.agility]);characters=3
if len(party) > 3: character3 = battle_object(party[3]);p.append([3, character3.agility]);characters=4
e = []
if len(enemy) > 0: enemy4 = battle_object(enemy[0]);e.append([4, enemy4.agility]);enemies=1
if len(enemy) > 1: enemy5 = battle_object(enemy[1]);e.append([5, enemy5.agility]);enemies=2
if len(enemy) > 2: enemy6 = battle_object(enemy[2]);e.append([6, enemy6.agility]);enemies=3
if len(enemy) > 3: enemy7 = battle_object(enemy[3]);e.append([7, enemy7.agility]);enemies=4
if len(enemy) > 4: enemy8 = battle_object(enemy[4]);e.append([8, enemy8.agility]);enemies=5
if len(enemy) > 5: enemy9 = battle_object(enemy[5]);e.append([9, enemy9.agility]);enemies=6
def enemy_simplify(area, enemyID):
a = random.randrange(0, 8)
if a == 0:
if character3:
target = character3
elif character2:
target = character2
elif character1:
target = character1
elif character0:
target = character0
if a == 1:
if character2:
target = character2
elif character1:
target = character1
elif character0:
target = character0
elif character3:
target = character3
if a == 2:
if character1:
target = character1
elif character0:
target = character0
elif character3:
target = character3
elif character2:
target = character2
if a == 3:
if character0:
target = character0
elif character3:
target = character3
elif character2:
target = character2
elif character1:
target = character1
if a == 4:
if character3:
target = character3
elif character0:
target = character0
elif character1:
target = character1
elif character2:
target = character2
if a == 5:
if character2:
target = character2
elif character3:
target = character3
elif character0:
target = character0
elif character1:
target = character1
if a == 6:
if character1:
target = character1
elif character2:
target = character2
elif character3:
target = character3
elif character0:
target = character0
if a == 7:
if character0:
target = character0
elif character1:
target = character1
elif character2:
target = character2
elif character3:
target = character3
if area == "area_2":
if enemyID == 4: [enemy4.attack(target), enemy4.magic(target),
enemy4.attack(target), enemy4.magic(target),
enemy4.attack(target), enemy4.magic(target),
enemy4.attack(target), enemy4.magic(target),
enemy4.attack(target), enemy4.magic(target),
enemy4.attack(target), enemy4.run() ] % (random.randrange(0,12))
if enemyID == 5: [enemy5.attack(target), enemy5.magic(target),
enemy5.attack(target), enemy5.magic(target),
enemy5.attack(target), enemy5.magic(target),
enemy5.attack(target), enemy5.magic(target),
enemy5.attack(target), enemy5.magic(target),
enemy5.attack(target), enemy5.run() ] % (random.randrange(0,12))
if enemyID == 6: [enemy6.attack(target), enemy6.magic(target),
enemy6.attack(target), enemy6.magic(target),
enemy6.attack(target), enemy6.magic(target),
enemy6.attack(target), enemy6.magic(target),
enemy6.attack(target), enemy6.magic(target),
enemy6.attack(target), enemy6.run() ] % (random.randrange(0,12))
if enemyID == 7: [enemy7.attack(target), enemy7.magic(target),
enemy7.attack(target), enemy7.magic(target),
enemy7.attack(target), enemy7.magic(target),
enemy7.attack(target), enemy7.magic(target),
enemy7.attack(target), enemy7.magic(target),
enemy7.attack(target), enemy7.run() ] % (random.randrange(0,12))
if enemyID == 8: [enemy8.attack(target), enemy8.magic(target),
enemy8.attack(target), enemy8.magic(target),
enemy8.attack(target), enemy8.magic(target),
enemy8.attack(target), enemy8.magic(target),
enemy8.attack(target), enemy8.magic(target),
enemy8.attack(target), enemy8.run() ] % (random.randrange(0,12))
if enemyID == 9: [enemy9.attack(target), enemy9.magic(target),
enemy9.attack(target), enemy9.magic(target),
enemy9.attack(target), enemy9.magic(target),
enemy9.attack(target), enemy9.magic(target),
enemy9.attack(target), enemy9.magic(target),
enemy9.attack(target), enemy9.run() ] % (random.randrange(0,12))
turns = return_turns(p, e, 5)
battle_return = "0"
while battle_return == "0":
if turns[0] == 0:
print"#Character0"
elif turns[0] == 1:
print"#Character1"
elif turns[0] == 2:
print"#Character2"
elif turns[0] == 3:
print"#Character3"
elif turns[0] > 3:
enemy_simplify(area, turns[0])
###if character dies, characters -= 1
"""Check Status"""
if characters == 0:
battle_return = 'You Died'
elif enemies == 0:
battle_return = 'You Won'
"""Advance to the next turn"""
turns = turns[1:]
##########################################
name="Turk"
lvl = 5
maxhp = "30"
curhp = "30"
maxmp = "5"
curmp = "5"
stn = 12
defn = 8
agi = 7
luck = 9
accuracy = 7
exp = figure_exp(lvl)
weapon = "Rusty Sword"
armor = "Rusty Armor"
magic = ["ice"]
Turk = [name, lvl, maxhp, curhp, maxmp, curmp, stn, defn, agi, luck, accuracy, exp, weapon, armor, magic]
party = [Turk]
area = "area_2"
#def average_enemy_stats([name, e_lvl, e_hp, e_mp, e_stn, e_defn, e_agi, e_luck, e_acc, magic]):
# enemy = [name, e_lvl, e_hp, e_mp, e_stn, e_defn, e_agi, e_luck, e_acc, magic]
# return enemy
e_lvl = (random.randrange(1,3))
enemy = [ ["Goblin",
(random.randrange(1,3)),
(((e_lvl + 5) * 2) + random.randrange(0, 3))+1,
(0)+1,
((e_lvl) * 2)+1,
((e_lvl) * 2) + random.randrange(-2, 2)+1,
((e_lvl) * 2) + random.randrange(-2, 4)+1,
((e_lvl) * 2) + random.randrange(-2, 1)+1,
((e_lvl) +30) / 10 + random.randrange(0, e_lvl)+1,
["fire"] ] ]
battle(party, enemy, area)
##########################################I want the bold lines to execute the indentation, only if the variable exists (has been declared). I know you could add a temporary variable that is called 1 when the variable is called, and is otherwise 0. But I'd still like to know if there is a very simple method. |
|
|
|
|
|
#7 |
|
Programmer
Join Date: Apr 2005
Posts: 73
Rep Power: 4
![]() |
If you have your characters in a list you should do something along the lines of:
import random
charlist = ["Joe", "Mary", "Kim"] # in reality this would be a list of
# player character objects
class Monster(str): # In reality this would be a proper object
def select_target(self):
mytarget = random.choice(charlist)
print self, "attacking", mytarget
m1 = Monster("goblin")
m2 = Monster("imp")
for i in range(5):
m1.select_target()
m2.select_target()class KHater(str): # Attacks players whose name begins with "K"
def select_target(self):
ktargets = [char for char in charlist if char.startswith("K")]
if ktargets:
target = random.choice(ktargets)
print "I'm attacking ktarget", target
else:
target = random.choice(charlist)
print "Couldn't find a ktarget - attacking", target
khater = KHater("K Hater")
khater.select_target()
khater.select_target()
charlist.remove("Kim")
khater.select_target()
khater.select_target()--OH. |
|
|
|
|
|
#8 |
|
Programmer
Join Date: Feb 2005
Posts: 54
Rep Power: 4
![]() |
Ok, I ran your code and got the NameError exception. The quick solution is to just add the following right after the import statement:
character1 = None character2 = None character3 = None character4 = None name="Turk" lvl = 5 maxhp = "30" curhp = "30" maxmp = "5" curmp = "5" stn = 12 defn = 8 agi = 7 luck = 9 accuracy = 7 stats['lvl'] = 5 stats['maxhp'] = 30 stats['curhp'] = 30 |
|
|
|
|
|
#9 |
|
Programming Guru
![]() Join Date: Apr 2005
Posts: 1,825
Rep Power: 5
![]() |
That block isn't part of the code. I just put it there to make the function able to be called.
Although that random_choice() is helpful, all I wanted to know was if there was a statement to check if a variable exists. I guess not. I'll be fine. |
|
|
|
|
|
#10 | |
|
Programmer
Join Date: Feb 2005
Posts: 54
Rep Power: 4
![]() |
Well al1986 already gave you an answer a few posts back:
Quote:
|
|
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|