簡體   English   中英

如何在循環中重新生成隨機int?

[英]How do I regenerate a random int in a loop?

我似乎無法知道my_damage如何創建新的random值的解決方案。

那是因為while保持random.randrange相同。


所以我們說:

my_damage = random.randrange(40, 45)

然后我們添加戰斗公式:

jack_health = (jack_health + jack_defense) - my_damage
print(deskemon + " HAVE INFLICTED " + str(my_damage) + " TO CHIPHEAD")

然后出來:

LILWILLY HAVE INFLICTED 41 TO CHIPHEAD
CHIPHEAD HAS 261 HITPOINTS LEFT!
...
...
...
CHIPHEAD HAVE INFLICTED 5 TO LILWILLY
LILWILLY HAS 261 HITPOINTS LEFT!
BATTLE MENU:

(1) ATTACK
(2) SPECIAL ATTACK
> 1
LILWILLY HAVE INFLICTED 41 TO CHIPHEAD
CHIPHEAD HAS 222 HITPOINTS LEFT!
...
...
...
CHIPHEAD HAVE INFLICTED 5 TO LILWILLY
LILWILLY HAS 222 HITPOINTS LEFT!

每次,我使用代碼, random值保持不變, 它不會改變

我知道一個解決方案,但因為my_damage可以通過input更改為我程序中的其他4個random值,我不能使用它:

jack_health = (jack_health + jack_defense) - random.randrange(20, 25)
print(deskemon + " HAVE INFLICTED " + str(random.randrange(20, 25)) + " TO CHIPHEAD")

筆記:

如果您需要以下信息,請訪問pastebin.com中的完整代碼: http//pastebin.com/iij5C16z

當您調用隨機數時,該函數返回單個值。 因此你的錯誤。 每次想要一個新值時,你需要想出一種調用函數的方法。

你可以做一些聰明的東西,需要裝飾師 ,我將在下面展示。

def recall_last(func):
    def _inner(*args, **kwargs):
        if args:
            func.last_dealt = func(*args,**kwargs)
        else:
            func.last_dealt = getattr(func,'last_dealt',0)
        return func.last_dealt
    return _inner

@recall_last
def rand_damage(*args):
    return random.randrange(*args)

每次傳遞一個下限和上限以在randrange函數中使用時,此代碼將返回一個新值。 如果沒有傳遞任何內容,則返回生成的最后一個值。 那么這將適用於您的代碼

if deskemon_selection_input == "1":
    deskemon = "TIMOSHA"
    my_health = 500
    my_damage = (20, 25)
    my_defense = random.randrange(10, 15)
    my_specialattack = 0
    print("You have selected TIMOSHA as your Deskemon")
    deskemon_selection_loop = False

   ....
jack_health = (jack_health + jack_defense) - rand_damage(*my_damage)
print(deskemon + " HAVE INFLICTED " + str(rand_damage()) + " TO CHIPHEAD")

我知道這應該用類實現,但我仍在學習類,所以這不是使用類:

import random

def damage( attack ):
    return random.randrange(attack*0.9, attack*1.1)

my_name = 'LILWILLY' 
my_health = 300
my_defense = 10
my_attack = 40

enemy_name = 'CHIPHEAD'
enemy_health = 100
enemy_defense = 1
enemy_attack = 40

while my_health > 0 and enemy_health > 0:
    my_damage = damage( my_attack )
    enemy_damage = damage( enemy_attack )
    my_health = (my_health + my_defense) - enemy_damage
    enemy_health = (enemy_health + enemy_defense) - my_damage
    print( '{0} HAVE INFLICTED {1} TO {2}'.format( my_name, my_damage, enemy_name ))
    print( '{0} has {1} hitpoints left'.format(enemy_name, enemy_health ) )
    print( '{0} HAVE INFLICTED {1} TO {2}'.format( enemy_name, enemy_damage, my_name ))
    print( '{0} has {1} hitpoints left'.format(my_name, my_health ) )

else:
    if my_health > 0:
        print ( '***{} has slain {}!'.format(my_name, enemy_name))
    elif enemy_health > 0:
        print ( '***{} has slain {}!'.format(enemy_name, my_name))
    else:
        print('BOTH {} and {} have died'.format(my_name, enemy_name))

我得到的結果:

LILWILLY HAVE INFLICTED 42 TO CHIPHEAD
CHIPHEAD has 59 hitpoints left
CHIPHEAD HAVE INFLICTED 36 TO LILWILLY
LILWILLY has 274 hitpoints left
LILWILLY HAVE INFLICTED 40 TO CHIPHEAD
CHIPHEAD has 20 hitpoints left
CHIPHEAD HAVE INFLICTED 43 TO LILWILLY
LILWILLY has 241 hitpoints left
LILWILLY HAVE INFLICTED 41 TO CHIPHEAD
CHIPHEAD has -20 hitpoints left
CHIPHEAD HAVE INFLICTED 40 TO LILWILLY
LILWILLY has 211 hitpoints left
***LILWILLY has slain CHIPHEAD!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM