我正在尝试通过阅读迈克尔道森的“绝对初学者的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)
问题是我实际上没有从调用玩家旅行方法获得任何回报,而是调用它的打印部分。
首先,有人可以帮我解决一下我已经得到的东西,以便位置列表实际创建一个位置对象列表,然后该方法从该列表中随机选择
其次,如果我的代码是,我怀疑,咆哮完全错误的树。有人可以告诉我一种创建一个其他对象列表的方法。
答案 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__