如何让Python文字冒险游戏商店保持运行直到输入'n'退出
文字冒险游戏商店多件购买功能修复
问题原因
现有代码仅将「无效输入重输」做了循环处理,整个购买交互流程只执行1次:用户完成一次有效输入(不管是买道具还是输错重输后买道具),代码跑完对应分支就直接退出shop()函数回到主流程,所以每次只能买1件道具,必须重新触发商店入口才能买第二件。
修改方案
给整个商店交互逻辑套一层外层死循环,仅当用户输入n时触发循环退出,其余操作(买道具、换装备)执行完后自动回到购买输入提示,实现连续操作。
- 保留原有无效输入校验的内层循环逻辑,不需要改动
- 原有购买、装备的业务判断逻辑不需要调整,只需要把所有逻辑移入外层循环
- 仅在用户输入
n的分支执行break跳出外层循环,退出商店返回主游戏流程
修改后核心代码参考
def shop(): # 此处保留你原有的商店欢迎语、商品列表打印等初始化逻辑即可 while True: buy_item = input('\nWhat would you like to buy? Enter \'n\' to close shop,\'e\' to equip something, \'1\' for dagger, \'2\' for short sword, \'5\' for leather armour and so on. ').lower() possible_answers = ['1', '2', '3', '4', '5', '6', '7', '8', 'n', 'e'] # 原有无效输入校验逻辑保留 while buy_item not in possible_answers: print('Invalid answer') buy_item = input('What would you like to buy? Enter \'n\' to close shop, \'e\' to equip something, \'1\' for dagger, \'2\' for short sword, \'5\' for leather armour and so on. ').lower() # 原有业务判断逻辑整体移入,仅在n分支加break if buy_item == '1': if shop_items[0].get('dagger cost') > player['gold']: print('Not enough gold!') else: player['weapons'].append('dagger') player['gold'] -= shop_items[0].get('dagger cost') print(f'You just bought dagger for {shop_items[0].get("dagger cost")}') print(f'Gold: {player["gold"]}') elif buy_item == '2': # 此处补全你原有的短剑购买逻辑,和匕首逻辑结构一致即可 pass elif buy_item == '5': # 此处补全你原有的皮甲购买逻辑 pass elif buy_item == 'e': # 此处补全你原有的装备操作逻辑 pass elif buy_item == 'n': print('Thank you for visiting the shop. You can always come back by entering \'s\'.') break # 仅此处触发商店退出
补充说明
- 其余编号商品(3/4/6/7/8)的购买逻辑直接按匕首的分支格式补全即可,不需要额外调整
- 所有购买、装备操作的分支不要加
break,执行完对应逻辑后会自动回到下一轮购买提示,支持连续购买多件道具 - 可以按需在每次购买完成后打印当前背包道具、剩余金币,减少用户记忆成本
内容的提问来源于stack exchange,提问作者PrOgRaMmE
相关产品推荐
相关产品推荐

