我正在创建一个文本RPG,从老文本冒险中获取灵感,玩家输入英文命令;比如'拿起剑'之类的东西。 我建立了一个简单的;输入'A'来执行此操作并输入'B'来执行此操作,但我想扩展我的系统以获得更多自由。 我需要创建一个系统;当玩家输入命令时,程序会选出关键词。 我认为这可以通过'in'命令实现。 这是我的代码:
print "What would you like to do??"
input_loop_sleep = str('')
choice_sleep = raw_input(str('>>>'))
loop_sleep = False
table_time = False
bed_time = False
error_time = False
while loop_sleep == False:
if str('sleep') in choice_sleep or str('bed') in choice_sleep or str('goodnight') in choice_sleep or str('Sleep') in choice_sleep or str('tired') in choice_sleep:
while bed_time == False:
print "you decide to go back to sleep"
time.sleep(1)
print "..."
time.sleep(1)
print ""
time.sleep(1)
print "darkness"
time.sleep(1)
print ""
print "you wake up..."
time.sleep(1)
print "it is now 9:15am"
time == int(9.15)
time.sleep(1)
print "You are standing in your room, slightly more refreshed."
time.sleep(1)
print "there is a table with some things on it, stairs, and a wardrobe... with the doors wide open..."
time.sleep(1)
print "that's strange... you swear that they were shut when you went to sleep..."
break
else:
bed_time == True
break
bed_loop_choice = raw_input('>>>')
elif str('bedside') in choice_sleep or str('table') in str(choice_sleep):
while table_time == False:
print "You rub your eyes and pick up some belongings from a"
print "bedside table."
time.sleep(1)
print "Map added!"
time.sleep(1)
print "100 gold added!"
time.sleep(1)
print "Leather Bag added!"
cash == int(100)
time.sleep(1)
Map == str('map of', str(province))
Inventory == [str(Map)]
container == str('leather bag')
print "your", str(container), str("contains a"), str(Map), str('and'), str(cash)
break
else:
table_time == True
break
else:
print "invalid command!"
当我运行代码时,无论我输入什么内容,它总是与'sleep'选项一起使用。 我可能只是犯了一些简单的错误! 你能帮我解决我做错了什么以及如何解决它。
答案 0 :(得分:5)
回答有关为什么sleep
循环一直重复的问题:
您正在通过
控制循环while bed_time == False:
但是你从未在循环中将bed_time
设置为True
(仅在else
子句中,但该子句仅在循环正常退出时执行,不当它正在通过break
退出时,正如您现在所做的那样 - 因此bed_time
永远不会改变。
此外,通常不赞成直接比较布尔值。习惯的方式(在大多数语言中,不仅仅是Python)将是while not bedtime:
。
在开始这样一个大项目之前,您应该阅读一些初学者的编程书籍和/或Python tutorial。您的代码中存在一些问题,这些问题表明您确实需要掌握一些基本的编程原则和Python惯用语。
例如,
int(9.15)
不是存储时间的好方法 - 结果将是9
。
然后您使用time == int(9.15)
,这意味着“将模块time
与整数9
进行比较”。我猜你的意思time = int(9.15)
由于上述原因已经很糟糕,但是会出现另一个问题:你会覆盖模块名time
,这会导致后续的time.sleep(1)
命令失败并显示AttributeError
。
您的代码中不需要进行大多数str()
次调用,因为您在已经 字符串的对象上使用它。如果你不是,那就错了:str('map of', str(province))
会引发TypeError
(str
只接受一个参数)。
您正在为不是类实例的对象使用大写变量名。
等等...
答案 1 :(得分:2)
我认为这应该足以解决问题
In [1]: str('bed') in "bedside"
Out[1]: True
因此,当您编写bedside
时,如果条件正确,则会进入sleep
选项,因此您的回答错误。
你应该写:
if str('bed') == choice_sleep or *other conditions* :
then got inside the sleep option
P.S:我假设您已导入time
模块。
P.P.S:我检查了代码并输入table
它工作正常。