**已关闭。**此问题需要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)
型
问题是,除了调用它的打印部分之外,我实际上并没有从调用球员旅行方法中得到任何东西。
首先,谁能帮我整理一下我已经得到的东西,这样位置列表就能创建一个位置对象的列表,然后方法从这个列表中随机选择
其次,如果我的代码,正如我所怀疑的那样,完全错误的树。有人能告诉我一种方法来创建一个类,它是其他对象的列表。
2条答案
按热度按时间tvmytwxo1#
你没有描述你的问题,但提到你怀疑一些列表没有被创建。实际上,你有这样一行:
字符串
这一行有错误!您应该将其更改为:
型
第二个版本创建了
Location_list
类的一个示例,并将其赋值给一个变量。这是你想要的。另一方面,第一个版本给Location_list
类起了另一个名字。所以你可以说location_list()
来创建同一个类的一个示例。但这不是你想要的。我没有通读整个代码,只是看了一下这个列表的用法,但这里有另一个错误:
型
Location_list
是一个类。Location_list.rand_location
是这个类的一个未绑定的方法。在那一行中,你只是引用了这个方法,但你甚至没有调用它。这就像在一行上写15
。有效的代码,但不做任何事情。相反,你想引用类的一个示例。如果你已经修复了第一个错误,你可以写
location_list
。(注意是l
而不是L
。)你想 * 调用 *rand_location
方法。所以你需要写:型
6vl6ewon2#
首先,你必须正确地用
location_list = Location_list()
示例化Location_list,然后你必须将location示例添加到location_list示例中。字符串
另外,要打印这些位置,您应该向Location类添加
__str__
方法,否则str(location)不会给予位置的名称:型