我坚持使用我的Python代码,有人可以看看吗?

时间:2016-06-06 18:24:34

标签: python python-3.x

我正在尝试通过阅读迈克尔道森的“绝对初学者的Python”来自学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")

到目前为止,这是我的代码。实际上,我想要做的是拥有一类位置和一个创建这些位置列表的类。然后我会在location类上有一个方法,它调用位置列表类上的方法以从列表中返回一个随机位置。据我所知,我遇到的问题是列表实际上并未创建。我用于此的代码实际上是从本章前面的内容中偷走的,因为我认为它可以做我想做的事 - 代码问题:

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

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

问题是我实际上没有从调用玩家旅行方法获得任何回报,而是调用它的打印部分。

首先,有人可以帮我解决一下我已经得到的东西,以便位置列表实际创建一个位置对象列表,然后该方法从该列表中随机选择

其次,如果我的代码是,我怀疑,咆哮完全错误的树。有人可以告诉我一种创建一个其他对象列表的方法。

2 个答案:

答案 0 :(得分:0)

我在评论中提到为什么这是一个糟糕的问题。需要强调的是,我会再次指出https://stackoverflow.com/help/mcve

您没有描述您的问题,但提到您怀疑某些列表未被创建。的确,你有这样一条线:

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")

答案 1 :(得分:0)

首先,您必须使用first = list_1() second = list_2() merged = first + second random.shuffle(merged) context = { "ran": merged } 正确实例化Location_list然后您必须将位置实例添加到您的location_list实例。那之后呢 添加

location_list = Location_list()

另外,为了打印这些位置,您应该在“位置”类中添加location_list.add(loc1) location_list.add(loc2) location_list.add(loc3) 方法,否则str(位置)不会为您提供该位置的名称:

__str__