首页 > 解决方案 > Python 文本冒险 销售,检查是否在列表中

问题描述

我正在编写文本冒险游戏。首先我编码了我的库存

player_inventory = []

因为应该没有什么可以开始的。在商店里,当我买东西时,它会说

player_inventory.append(What Ever The Item Is Called)

在那之后,如果我打印我的库存,它会说

(player_name)s inventory :
.....
...

所以现在我想添加一个销售系统。我尝试了诸如

def sell(player_inventory):
    print('selling:')
    for stuff in player_inventory:
        print(stuff)
    sold = input('what do you want to sell?')
    if (sold in player_inventory):
        print('successfully sold!!')
        player_inventory.remove(sold)
    return player_inventory

然后在主游戏循环中我会说

player_inventory = sell(player_inventory)

但是当我从我的库存中出售一些东西时,它应该说“成功出售!” 并从我的库存中删除该项目,但是它没有做我认为它会做的事情。

从我做的一个例子来看,我的库存中有一个“wooden_sword”,我只是在代码开头做了 wood_sword = 'wooden_sword'。我运行了销售功能并输入了“wooden_sword”,但它不起作用。我有点知道原因,但我无法解决

我认为原因是因为

sold = input('what do you want to sell?')

与我的物品不同。所以即使我输入了“wooden_sword”,因为我这样做了

wood_sword = 'wooden_sword' 

它行不通。我必须检查是否已售出等于 wood_sword 而不是这样做,但如果我这样做了,我的函数行会太多,有人可以帮忙吗?阅读本文

标签: python

解决方案


您可能希望将界面设计从键入项目名称更改为编号列表。用户可以选择要出售的物品的数量。这是一个示例函数。

def sell(player_inventory):
    print('Available to sell::')
    for i, stuff in enumerate(player_inventory, 1):
        print(i, stuff)
    sold = input('what item number do you want to sell? ("q" to exit)')

    if sold == 'q':
        return player_inventory

    try:
        sold = int(sold)
    except ValueError:
        print('Please use the item number')
        return player_inventory

    if sold <= len(player_inventory):
        print('successfully sold!!')
        player_inventory.pop(sold - 1)
    return player_inventory

推荐阅读