我被我的Python代码卡住了,有人能看看吗?[关闭]

4ngedf3f  于 2023-11-20  发布在  Python
关注(0)|答案(2)|浏览(158)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
7年前关闭。
Improve this question
我目前正试图通过阅读Michael Dawson的“Python for absolute beginners”来自学Python。我目前正在完成第9章中的挑战,很大程度上是为了真正掌握类之间实际上是如何交互的。我试图写一个(非常)简单的基于文本的冒险游戏,用户在不同的位置之间旅行。然而,我尝试的方式是不做我想要的。下面是代码:

  • 免责声明-我很清楚这可能看起来像垃圾,我不完全理解我自己写的东西,它的目的只是给予我对类交互的理解。
# classes module for my basic adventure game
import random

# the locations that the player will travel to 
class Location(object):
    """Locations that the adventurer can travel to"""
    def __init__(self, name, description):
        self.name = name
        self.description = description

class Location_list(object):
    def __init__(self):
        self.locations = []

    def __str__ (self):
        if self.locations:
            rep = ""
            for location in self.locations:
                rep += str(location)
        else:
            rep = "<empty>"
        return rep

    def clear(self):
        self.locations = []

    def add(self, location):
        self.locations.append(location)

    def rand_location(self):
        x = random.choice(self.locations)
        print("You step out of the magical portal, it has taken you to", x, "!")

# The player
class Adventurer(object):
    """An adventurer who travels to different locations within a mystical world"""
    def __init__(self, name):
        self.name = name

    def travel(self):
        Location_list.rand_location
        print("You step into the magic portal")

loc1 = Location("London", "The capital of the UK")
loc2 = Location("Paris", "The capital city of France")
loc3 = Location("Berlin", "The capital city of Germany")
location_list = Location_list


player = Adventurer(input("What is your name traveller?"))

question = input("do you want to travel now?")

if question == "yes":
                player.travel()
else: print("No journey for you bellend")

input("press enter to exit")

字符串
到目前为止,这是我的代码。实际上,我想做的是有一个位置类和一个创建这些位置列表的类。然后,我将在位置类上有一个方法,该方法调用位置列表类上的一个方法,以返回列表中的随机位置。据我所知,我遇到的问题是,列表实际上并没有被创建。我用于此的代码实际上从前面的章节中偷来的,因为我认为它会做我想做的事情-代码问题:

class Location_list(object):
        def __init__(self):
            self.locations = []

        def __str__ (self):
            if self.locations:
                rep = ""
                for location in self.locations:
                    rep += str(location)


问题是,除了调用它的打印部分之外,我实际上并没有从调用球员旅行方法中得到任何东西。
首先,谁能帮我整理一下我已经得到的东西,这样位置列表就能创建一个位置对象的列表,然后方法从这个列表中随机选择
其次,如果我的代码,正如我所怀疑的那样,完全错误的树。有人能告诉我一种方法来创建一个类,它是其他对象的列表。

tvmytwxo

tvmytwxo1#

你没有描述你的问题,但提到你怀疑一些列表没有被创建。实际上,你有这样一行:

location_list = Location_list

字符串
这一行有错误!您应该将其更改为:

location_list = Location_list()


第二个版本创建了Location_list类的一个示例,并将其赋值给一个变量。这是你想要的。另一方面,第一个版本给Location_list类起了另一个名字。所以你可以说location_list()来创建同一个类的一个示例。但这不是你想要的。
我没有通读整个代码,只是看了一下这个列表的用法,但这里有另一个错误:

def travel(self):
    Location_list.rand_location
    print("You step into the magic portal")


Location_list是一个类。Location_list.rand_location是这个类的一个未绑定的方法。在那一行中,你只是引用了这个方法,但你甚至没有调用它。这就像在一行上写15。有效的代码,但不做任何事情。
相反,你想引用类的一个示例。如果你已经修复了第一个错误,你可以写location_list。(注意是l而不是L。)你想 * 调用 * rand_location方法。所以你需要写:

def travel(self):
    location_list.rand_location()
    print("You step into the magic portal")

6vl6ewon

6vl6ewon2#

首先,你必须正确地用location_list = Location_list()示例化Location_list,然后你必须将location示例添加到location_list示例中。

location_list.add(loc1)
location_list.add(loc2)
location_list.add(loc3)

字符串
另外,要打印这些位置,您应该向Location类添加__str__方法,否则str(location)不会给予位置的名称:

def __str__ (self):
        if self.name:
            return str(self.name)

相关问题