不支持的操作数类型 - =:' list'和' int'

时间:2017-03-10 01:09:32

标签: python

在开始之前,我想说这是我第一次单独编写代码,而且我对编码相对较新。我现在只做了几个星期的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),并且运算符更改为+。我重申我对编码很新,所以我真的不知道这意味着什么。任何帮助表示赞赏。

6 个答案:

答案 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