我目前仍在学习python,但到目前为止效果很好,所以我决定承担一个更大的项目,在这个项目中,我构建一个基于文本的简短游戏,并使用自定义模块来分隔我的代码。不幸的是,我遇到了许多麻烦,并通过使用一些google和耐心地解决了这些问题,但是这一点让我很沮丧。
问题本身就是我有两个正在使用的文件:main.py和roomsClass.py。在main.py中,有输入请求和将输入调低的命令,但是随后我尝试将输入转移到gameRooms.py中的函数中,但这根本行不通。
我们非常感谢您的帮助,如果我在这篇文章中做错了任何事情,请告诉我。我是stackoverflow的新手,可以使用我能得到的任何指针。
我试图在单个模块中全局分配它,但是我不得不再次定义输入变量,这会使我的代码弹出一个无用的输入点。
还尝试将main导入文件,但这会导致gameRooms和main之间的依赖关系过多。
main.py
userInput = input('\nWhat shall you do? :> ')
gameInput = userInput.lower()
gameRooms.py
class Rooms():
def __init__(self, pos, name, desc, exits, status, nLock, sLock, eLock, wLock):
self.pos = pos
self.name = name
self.desc = desc
self.exits = exits
self.status = status
self.nLock = nLock
self.sLock = sLock
self.eLock = eLock
self.wLock = wLock
def lookRoom(self):
global userInput
global gameInput
if gameInput in cfg.lookList and self.pos == cfg.xyMap:
print(f"\n{self.name}")
print(f"\n\t{self.desc}")
那只是模块的一小部分,只是我要解决的问题。主要只是lookRoom(self)中的gameInput:。
我希望它实际上可以让我使用来自main.py的用户输入,但是输出仅显示gameInput未定义。
答案 0 :(得分:0)
首先,您应该对代码进行一些更改,这些更改将使您的代码听起来更像是 Pythonic 。
main.py
中的更改,将您的代码放入带有return的函数中:
def game_input():
userInput = input('\nWhat shall you do? :> ')
gameInput = userInput.lower()
return gameInput
gameRooms.py
中的更改:
gameInput
。lookRoom()
进行一些更改。main.py
。import main
class Rooms():
def __init__(self, pos, name, desc, exits, status, nLock, sLock, eLock, wLock, gameInput):
self.pos = pos
self.name = name
self.desc = desc
self.exits = exits
self.status = status
self.nLock = nLock
self.sLock = sLock
self.eLock = eLock
self.wLock = wLock
self.gameInput = gameInput
def lookRoom(self):
if self.gameInput in cfg.lookList and self.pos == cfg.xyMap:
print(f"\n{self.name}")
print(f"\n\t{self.desc}")
现在,当您创建新对象Rooms()
时,您必须告知所有参数,甚至包括参数gameInput
看看:
if __name__ == '__main__':
gameInput = main.game_input()
r1 = Rooms("a", "b", "c", "d", "e", "f", "g", "h", "i", gameInput)
#r1.lookRoom()
您甚至可以使用while
语句强制用户通知gameInput
,这是一个示例:
if __name__ == '__main__':
while True:
gameInput = main.game_input()
if gameInput == "":
print("Type your name correctly!")
else:
break
r1 = Rooms("a", "b", "c", "d", "e", "f", "g", "h", "i", gameInput)
#r1.lookRoom()
编辑1 :
gameRooms.py
:
class Rooms():
def __init__(self, pos, name, desc, exits, status, nLock, sLock, eLock, wLock, gameInput):
self.pos = pos
self.name = name
self.desc = desc
self.exits = exits
self.status = status
self.nLock = nLock
self.sLock = sLock
self.eLock = eLock
self.wLock = wLock
self.gameInput = gameInput
def lookRoom(self):
if self.gameInput in cfg.lookList and self.pos == cfg.xyMap:
print(f"\n{self.name}")
print(f"\n\t{self.desc}")
main.py
:
from gameRooms import *
def game_input():
userInput = input('\nWhat shall you do? :> ')
gameInput = userInput.lower()
return gameInput
if __name__ == '__main__':
gameInput = game_input()
r1 = Rooms("a", "b", "c", "d", "e", "f", "g", "h", "i", gameInput)
#r1.lookRoom()