这是我的(缩短的)代码。

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


我尝试了几件事,但无济于事。据我所知这应该工作吗?

更新资料

查看了两个答案后,我对代码进行了一些更改。新错误。

另外,我也没有明确意图。我基本上想运行此函数,它将以递归的方式提取各种变量,并将它们作为新的“马戏演员”一起添加到新的类实例中(如果这是有意义的话)(我对编码是相当陌生的)。

在这种情况下,我希望它创建马[0],该人将是“杰夫”,赔率为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)

最佳答案

global horse中添加Horsecreate并将打印内容更改为print(horse[0].name)

horse变量是Horsecreate函数的局部变量。函数在Python中创建局部作用域。在函数内部创建的分配在函数外部不可见。 global关键字使它在函数外部而不是本地可见。您也可以在函数外声明horse = {}

当您说0时,Python如何知道horse0不仅是新变量名的一部分?您必须包含与分配[]下标运算符相同的下标运算符。



您的嵌套循环也没有意义。您将丢弃最后一次while循环之前制造的所有马匹。



更新的版本在for循环内有一个返回值。这样会立即结束循环,因此您只会得到一个循环,而不是您想要的三个循环。如果它是全局变量,则根本不需要返回并重新分配horse。但是,如果您在循环后返回了它,则它不必是全局的。做一个或另一个。

关于python - Python- undefined variable 名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54000678/

10-10 00:51