2017-05-16 2 views
0

a, b und c sind vordefinierte Funktionen, die ein Teil von viel größerem Code sind. der Code zurückkehrt immer den elif Teil auch wenn die Wahl enemy_def i versucht haben, den Druck jeder aber nichts passierennach dem Zufallsprinzip eine Funktion aus einer Liste wählen dann Bedingungen auf das Ergebnis anwenden

a = enemy_hit 
b = enemy_def 
c = enemy_sphit 
d = [a,b,c] 
enemyresponse = random.choice(d)() 
#print(enemyresponse) 
if enemyresponse == b : 
    thing.health = thing.health - 0.25 
    #print(enemyresponse) 
elif enemyresponse != b : 
    #print(enemyresponse) 
    thing.health = thing.health - 1 

Antwort

1

enemy_reponse wird nie b *, gleich sein, weil enemy_reponse der Rückgabewert der Funktion ist , nicht die Funktion selbst. Beachten Sie, wie Sie die Funktion aufrufen, sofort nach dem Zufallsprinzip wählen sie:

random.choice(d)() 
#    ^Called it 

Speichern Sie die Funktion, die in einer Variablen gewählt wurde chosen_function (oder so ähnlich) genannt, dann überprüfen Sie dagegen.

Sie bedeutete wahrscheinlich so etwas wie dieses (nicht getestet):

a = enemy_hit 
b = enemy_def 
c = enemy_sphit 
d = [a,b,c] 

# Randomly get function from list 
chosen_function = random.choice(d) 

# Call it to get the return value 
func_return = chosen_function() 
print(func_return) 

if chosen_function == b: 
    thing.health = thing.health - 0.25 

else: 
    thing.health = thing.health - 1 

* Sofern nicht b kehrt selbst, was unwahrscheinlich scheint.

+0

ist ihr ein Weg um dies kann ich nach dem Zufallsprinzip wählen, ohne zu nennen, ich meine, kann ich es mit den if \ else Aussagen nennen oder kann ich dies tun, wenn ich nicht die Funktionen Variablen zuweisen –

+0

@HasanFares Ja, nur don ' t setze das '()' nach dem Aufruf auf 'choice'. Es sind diese Klammern, die zum Aufruf der Funktion führen. – Carcigenicate

+0

Ich habe versucht, aber alles, was es zurückgibt, ist: Funktion Start. .enemy_sphit bei 0x005E84F8> –

Verwandte Themen