这是我的(缩短的)代码。
race1names = ["Jeff", "Paul", "Mark"]
race1odds = [5, 6, 7]
class Horse:
def __init__(self, name, odds, age, weight):
self.name = name
self.odds = odds
self.age = age
self.weight = weight
def Horsecreate():
hcount = 0
horse = {}
while hcount < 3:
cname = race1names[hcount]
codds = race1odds[hcount]
cage = 3
cweight = 3
for i in range(0, 3):
horse[i] = Horse(cname, codds, cage, cweight)
hcount +=1
Horsecreate()
print(horse0.name)
print(horse1.name)
我的错误是:
File "file.exe", line 26, in <module>
print(horse0.name)
NameError: name 'horse0' is not defined
我尝试了一些尝试,但无济于事。据我所知这应该工作吗?
查看了两个答案后,我对代码进行了一些更改。新错误。
我也没有澄清我的意图。我基本上想运行此函数,它将以递归的方式提取各种变量,并将它们作为新的“ horse actor”一起添加到新的类实例中(如果这是合理的话)(我对编码是相当陌生的。)
在这种情况下,我希望它创建马[0],他将是“ Jeff”,赔率是5。
马[1]的赔率是6
然后是马[2],他的赔率为7
(来自两个简单的测试列表“ race1names”和“ race1odds”)
我最终希望拥有多匹马,所有的马都有各自独立的价值观。这只是测试脚本,但是以后会增加更多的复杂性。
更新的代码为:
race1names = ["Jeff", "Paul", "Mark"]
race1odds = [5, 6, 7]
horse = {}
class Horse:
def __init__(self, name, odds, age, weight):
self.name = name
self.odds = odds
self.age = age
self.weight = weight
def Horsecreate():
for i in range(0, 2):
cname = race1names[i]
codds = race1odds[i]
cage = 3
cweight = 3
horse[i] = Horse(cname, codds, cage, cweight)
return horse
horse = Horsecreate()
print(horse[0].name)
print(horse[1].name)
print(horse[2].name)
出现错误:
Jeff
Traceback (most recent call last):
File "file", line 27, in <module>
print(horse[1].name)
KeyError: 1
看上去很简单,但是再次尝试了几件事,但都没有成功。
值得注意的是,印有“杰夫”的字样,显示出这种作品。
删除退货后,它现在给我:
Traceback (most recent call last):
File "file", line 26, in <module>
print(horse[0].name)
TypeError: 'NoneType' object is not subscriptable
谢谢,非常感谢您的迅速帮助
作为对@gilch的回应,我删除了重新分配并返回。现在它给了我错误:
print(horse[0].name)
KeyError: 0
好像没有分配。 这是当前代码:
race1names = ["Jeff", "Paul", "Mark"]
race1odds = [5, 6, 7]
global horse
horse = {}
class Horse:
def __init__(self, name, odds, age, weight):
self.name = name
self.odds = odds
self.age = age
self.weight = weight
def Horsecreate():
for i in range(0, 2):
cname = race1names[i]
codds = race1odds[i]
cage = 3
cweight = 3
horse[i] = Horse(cname, codds, cage, cweight)
print(horse[0].name)
print(horse[1].name)
print(horse[2].name)
答案 0 :(得分:4)
在global horse
中添加Horsecreate
,然后将打印内容更改为print(horse[0].name)
horse
变量是Horsecreate
函数的局部变量。函数在Python中创建局部作用域。在函数内部创建的分配在函数外部不可见。 global
关键字使它在函数外部而不是本地可见。您也可以在函数外声明horse = {}
。
当您说0
时,Python如何知道horse0
不仅是新变量名的一部分?您必须包括[]
下标运算符,就像您分配它时一样。
您的嵌套循环也没有意义。您将扔掉最后一个while循环之前的所有马匹。
更新的版本在for循环内有一个返回值。这样会立即结束循环,因此您只会得到一个循环,而不是您想要的三个循环。如果它是全局的,则根本不需要返回并重新分配horse
。但是,如果您在循环后返回了它,则它不必是全局的。做一个或另一个。