3次相同的输入后,对象变成字符串

时间:2019-05-25 20:00:55

标签: python class while-loop

我在python 3.6中将文本冒险作为学校项目进行开发。该代码应根据您来自何处,使您朝不同的方向“看”。当输入连续3次相同时,程序崩溃,我不知道为什么。同样,我所面对的方向并不会一直变化。在大多数情况下,它都有效,但是在某些情况下,它无效。

我希望我不会混淆任何人,但是我来自德国,所以这里有一些翻译:

raum = room

oben = up

unten = down

我试图在它们之间放置一个字符串输入以打破链条。

class Place(object):
def __init__(self):
    self.infor = ''
    self.infol = ''
    self.infou = ''
    self.infod = ''
    self.ninfor = ''
    self.ninfol = ''
    self.ninfou = ''
    self.ninfod = ''   #n(ew)infod(own)
    self.up=''
    self.down=''
    self.right=''
    self.left=''
    self.nup=''
    self.ndown=''
    self.nright=''
    self.nleft=''
def newDirection(self, room):
    room.nup = room.up          #n(ew)up
    room.ndown = room.down
    room.nright = room.right
    room.nleft = room.left
def setDirection(self, room):
    room.up = room.nup          #n(ew)up
    room.down = room.ndown
    room.right = room.nright
    room.left = room.nleft
def dup(self, room):
    room.nup = room.up
    room.ndown = room.down
    room.nright = room.right
    room.nleft = room.left
    room.ninfou = room.infou
    room.ninfod = room.infod
    room.ninfor = room.infor
    room.ninfol = room.infol
def ddown(self, room):
    room.nup = room.down
    room.ndown = room.up
    room.nright = room.left
    room.nleft = room.right
    room.ninfou = room.infod
    room.ninfod = room.infou
    room.ninfor = room.infol
    room.ninfol = room.infor
def dright(self):
    room.up = room.left
    room.down = room.right
    room.right = room.down
    room.left = room.up
def dleft(self):
    room.up = room.right
    room.down = room.left
    room.right = room.up
    room.left = room.down

raum_1=Place()
raum_2=Place()
raum_3=Place()

raum_1.up = raum_2
raum_1.down = raum_1

raum_2.down = raum_1
raum_2.up = raum_3

raum_3.down = raum_2

raum_1.infou = "R1 Oben"

raum_2.infou = "R2 Oben"
raum_2.infod = "R2 Unten"

raum_3.infod = "R3 Unten"

position = raum_1
death = False
win = False

position.newDirection(position)

while(death != True)and(win != True):
command=input()
if command == 'up':
    position = position.nup
    position.dup(position)
if command == 'down':
    position = position.ndown
    position.ddown(position)
if command == 'right':
    position = position.nright
    position.dright
if command == 'left':
    position = position.nleft
    position.dleft
position.setDirection(position)
print(position.ninfou, position.ninfod, position.ninfor, position.ninfol)

您应该能够根据需要多次切换房间。

Traceback (most recent call last):
  File "G:\Informatik\Textadventure_game_2.py", line 90, in <module>
    position.ddown(position)
AttributeError: 'str' object has no attribute 'ddown'

1 个答案:

答案 0 :(得分:0)

对于当您面对的方向改变时的错误,请看dleft。您会注意到可以先设置room.up = room.right,然后再设置room.right = room.up。这不会切换两个值-只需将room.up设置为room.right,然后将room.right设置为room.up,就已经是了。

def dright(self):
    room.up = room.left
    room.down = room.right
    room.right = room.down
    room.left = room.up
def dleft(self):
    room.up = room.right
    room.down = room.left
    room.right = room.up
    room.left = room.down

Python允许您使用元组来随机播放值,因此您不必说temp = a,a = b,b = temp等。

对于dright:

(room.up,room.down,room.right,room.left) = (room.left,room.right,room,down,room.up)

对于dleft:

(room.up,room.down,room.right,room.left) = (room.right,room.left,room.up,room.down)

注意:这只是对您的代码进行音译。我认为以下内容将所有内容向左移,而您的代码只是将方向翻转:

(room.up,room.left,room.down,room.right) = (room.left,room.down,room.right,room.up)

以下内容右移。我也喜欢顺时针或逆时针方向的方向。

(room.up,room.right,room.down,room.left) = (room.right,room.down,room.left,room.up)