从另一个文件中的函数导入变量
Importing variables from a function inside another file
我正在尝试使用另一个文件中的函数为某些变量生成随机值,但它似乎不起作用
函数
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
使用函数的代码(函数所在的文件名为monsterstats.py)
from monsterstats import *
common_monsterstat()
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
在 def common_monsterstat()
函数中为 mmaxhealth 添加一个 return 语句。然后在第二个代码中将 mhealth 分配给 common_monsterstat()
函数。我建议你在 python 学习函数、全局变量和局部变量 :)
修复代码如下:
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return mmaxhealth
from monsterstats import *
mhealth= common_monsterstat()
def battlesys():
global mhealth
print("You challenged Monster!")
print("Monster's health: " + mhealth)
如果那只是设置数据,请不要使用函数。 Yu 可以定义按名称导入的常量。在“monsterstatps.py”中:
import random
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
然后在你的“main.py”中:
from monsterstats import *
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
从长远来看,您可以定义一个包含这些值的 class Stats
,并导入该 class 的一个实例。
与其拥有所有自由浮动变量,不如将它们分组到 class 中可能更容易。例如,您可以为通用统计信息创建一个 class,并创建一个工厂函数来创建该 class.
的实例
class Stats:
def __init__(self, attack, defense, health, maxhealth):
self.attack = attack
self.defense = defense
self.health = health
self.maxhealth = maxhealth
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return Stats(
attack=mattack,
defense=mdefense,
health=mhealth,
maxhealth=mmaxhealth,
)
在主要方法中,您可以使用工厂方法检索统计信息:
from monsterstats import *
stats = common_monsterstat()
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + stats.health)
为了更轻松地编写此 class,您可以利用数据class,它非常适合纯数据对象。
from dataclasses import dataclass
@dataclass
class Stats:
attack: int
defense: int
health: int
maxhealth: int
...
你的范围有问题。当您创建一个函数时,您为其赋值的每个变量都是一个局部变量(除非您使用 global
关键字)。您可以像这样使用全局关键字:
mhealth=0
def common_monsterstat():
global mhealth
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = health
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
common_monsterstat()
这将使您的代码更改全局健康而不是创建它的副本...
但更好的方法是简单地 return 健康变量,因为根据我的经验,全局关键字会在一段时间后变得混乱。但是,如果你需要你的游戏非常高效,而你可能不需要,那么使用 global 可以避免你创建太多变量(虽然不确定它是否会更有效率我只是这么认为:))所以,你可以这样做:
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return mhealth
def battlesys():
mhealth=common_monsterstat()
print("You challenged Monster!")
print("Monster's health: " + mhealth)
common_monsterstat()
battlesys()
这将创建一个local
变量,给它赋值,return它到另一个变量,然后打印它...看起来更复杂但实际上更容易...
如果您需要任何说明,请告诉我!
PS:您可能想为您的怪物取一个随机名称,并使用 f-string 以更酷的方式命名:
monsters=['centaurus','dwarf','spider']
def battlesys():
print(f"You challenged {r.choice(monsters)}!")
print("Monster's health: " + health)
PPS: 你没有在代码中导入 random...
我正在尝试使用另一个文件中的函数为某些变量生成随机值,但它似乎不起作用
函数
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
使用函数的代码(函数所在的文件名为monsterstats.py)
from monsterstats import *
common_monsterstat()
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
在 def common_monsterstat()
函数中为 mmaxhealth 添加一个 return 语句。然后在第二个代码中将 mhealth 分配给 common_monsterstat()
函数。我建议你在 python 学习函数、全局变量和局部变量 :)
修复代码如下:
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return mmaxhealth
from monsterstats import *
mhealth= common_monsterstat()
def battlesys():
global mhealth
print("You challenged Monster!")
print("Monster's health: " + mhealth)
如果那只是设置数据,请不要使用函数。 Yu 可以定义按名称导入的常量。在“monsterstatps.py”中:
import random
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
然后在你的“main.py”中:
from monsterstats import *
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
从长远来看,您可以定义一个包含这些值的 class Stats
,并导入该 class 的一个实例。
与其拥有所有自由浮动变量,不如将它们分组到 class 中可能更容易。例如,您可以为通用统计信息创建一个 class,并创建一个工厂函数来创建该 class.
的实例class Stats:
def __init__(self, attack, defense, health, maxhealth):
self.attack = attack
self.defense = defense
self.health = health
self.maxhealth = maxhealth
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return Stats(
attack=mattack,
defense=mdefense,
health=mhealth,
maxhealth=mmaxhealth,
)
在主要方法中,您可以使用工厂方法检索统计信息:
from monsterstats import *
stats = common_monsterstat()
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + stats.health)
为了更轻松地编写此 class,您可以利用数据class,它非常适合纯数据对象。
from dataclasses import dataclass
@dataclass
class Stats:
attack: int
defense: int
health: int
maxhealth: int
...
你的范围有问题。当您创建一个函数时,您为其赋值的每个变量都是一个局部变量(除非您使用 global
关键字)。您可以像这样使用全局关键字:
mhealth=0
def common_monsterstat():
global mhealth
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = health
def battlesys():
print("You challenged Monster!")
print("Monster's health: " + mhealth)
common_monsterstat()
这将使您的代码更改全局健康而不是创建它的副本...
但更好的方法是简单地 return 健康变量,因为根据我的经验,全局关键字会在一段时间后变得混乱。但是,如果你需要你的游戏非常高效,而你可能不需要,那么使用 global 可以避免你创建太多变量(虽然不确定它是否会更有效率我只是这么认为:))所以,你可以这样做:
def common_monsterstat():
mattack = random.randint(1, 5)
mdefense = random.randint(0, 1)
mhealth = random.randint(5, 10)
mmaxhealth = mhealth
return mhealth
def battlesys():
mhealth=common_monsterstat()
print("You challenged Monster!")
print("Monster's health: " + mhealth)
common_monsterstat()
battlesys()
这将创建一个local
变量,给它赋值,return它到另一个变量,然后打印它...看起来更复杂但实际上更容易...
如果您需要任何说明,请告诉我! PS:您可能想为您的怪物取一个随机名称,并使用 f-string 以更酷的方式命名:
monsters=['centaurus','dwarf','spider']
def battlesys():
print(f"You challenged {r.choice(monsters)}!")
print("Monster's health: " + health)
PPS: 你没有在代码中导入 random...