在开始之前,我想说这是我第一次单独编写代码,而且我对编码相对较新。我现在只做了几个星期的python。
所以我有一个学校项目,老师让我们做任何我们想做的事情,只是我们展示了在我们进入下一个IT部门之前学到的东西。我试图复制俄勒冈小径,并考虑到我已经诉诸于互联网它不会太棒了(并不是说这个网站上的人不是很棒)。我的代码目前看起来像这样:
resources = {
"food": [10],
"energy": [100],
"distance": [2000],
"exhaustion": [0],
"hunger": [0]
}
def prompt():
print "You can eat, move, hunt, or rest."
def get_action():
return raw_input("What will you do?")
def what_do(action):
for number in resources:
print number + str(resources[number])
if action == "eat":
print "You ate. Hunger restored."
resources['hunger'] == 0
resources['food'] -= 1
if action == "hunt":
print "You went out and hunted. You found 10 food."
resources['food'] += 10
print resources['food']
if action == "move":
print "You moved 50 miles."
resources['distance'] -= 50
if action == "rest":
print "You rested. Energy restored"
resources['energy'] == 100
resources['exhaustion'] == 0
def game():
while resources['distance'] >= 0:
prompt()
action = get_action()
what_do(action)
game()
目前只有一项行动有效,而rest
行动就是这样。我假设这是因为没有真正的操作员,它只是将我的疲惫恢复到0.无论它是否按预期工作,我都无法告诉,因为输出保持原样。对于其他所有操作,我得到以下错误消息的变体:
Traceback (most recent call last):
File "python", line 46, in <module>
File "python", line 44, in game
File "python", line 27, in what_do
TypeError: unsupported operand type(s) for -=: 'list' and 'int'
从输出到输出的唯一变化是列出的第三行(如果您想知道则为30和34),并且运算符更改为+
。我重申我对编码很新,所以我真的不知道这意味着什么。任何帮助表示赞赏。
答案 0 :(得分:2)
您的问题是资源值存储为列表即。 "food": [10]
[10]是一个列表,因为它在方括号中。将资源更改为此功能以使其正常工作:
resources = {
"food": 10,
"energy": 100,
"distance": 2000,
"exhaustion": 0,
"hunger": 0
}
除此之外,您需要使用=
而不是==
分配变量,因为==
用于比较并返回True或False。所以what_do函数应该是这样的:
def what_do(action):
for number in resources:
print number + str(resources[number])
if action == "eat":
print "You ate. Hunger restored."
resources['hunger'] = 0
resources['food'] -= 1
if action == "hunt":
print "You went out and hunted. You found 10 food."
resources['food'] += 10
print resources['food']
if action == "move":
print "You moved 50 miles."
resources['distance'] -= 50
if action == "rest":
print "You rested. Energy restored"
resources['energy'] = 100
resources['exhaustion'] = 0
答案 1 :(得分:0)
使用
resources = { “食物”:10, “能量”:100, “距离”:2000, “筋疲力尽”:0, “饥饿”:0
}
代替
答案 2 :(得分:0)
resources
包含列表作为值。
resources['hunger']
返回包含单个元素的列表。从列表中减去数字时,您期望发生什么?
我认为您不希望resources
成为列表地图。只需从[]
中的值中移除resources
即可创建值而不是列表。
答案 3 :(得分:0)
你正在尝试基本上做
[2000] - 50
这是不可能的,因为[2000]是一个列表。而不是
food: [10],
使用
food: 10,
等等。如果你必须使用列表,那么这样做减法:
resources['distance'][0] -= 50
访问资源['distance']的第一个元素,它是列表的第一个元素
答案 4 :(得分:0)
将资源更改为
resources = {"food":10,"energy":100,"distance:2000,"exhaustion": 0,"hunger":0}
并更改所有&#39; ==&#39;到&#39; =&#39;除了if语句中的那些。
答案 5 :(得分:-1)
您的初始资源是以list
为值的词汇。你可能只想使用数字。
resources = {
"food": 10,
"energy": 100,
"distance": 2000,
"exhaustion": 0,
"hunger": 0
}
接下来,what_do
中的部分更新不正确。您应该使用=
来更新资源的值,而不是==
,例如:
if action == "rest":
print "You rested. Energy restored"
resources['energy'] = 100
resources['exhaustion'] = 0