Python控制台动词加ing游戏报'str'对象不支持项赋值错误求助
报错根因
Python中的字符串属于不可变类型,不支持通过索引下标直接修改、删除单个字符。你代码中写的command[-1] = ""本质是尝试直接修改字符串最后一位的内容,因此会抛出'str' object does not support item assignment错误。
额外提一句:直接通过command[-1]取最后一位做判断的写法存在隐患,若用户输入空内容,会直接触发索引越界错误。
修复方案
不要尝试原地修改字符串的单个字符,Python中字符串修改的通用逻辑是基于原字符串切片、拼接生成新字符串。把原代码中判断词尾为e的逻辑块替换为如下写法即可:
# 用字符串内置endswith方法判断后缀,天然兼容空输入场景,不会报索引错 if command.endswith("e"): command = command[:-1]
修复后完整可运行代码
顺便修正了原代码的一个逻辑漏洞:原逻辑会把help/clear/rest这类控制指令存入动词历史列表,干扰后续“连续输入相同动词”的判断,调整后指令不会进入动词列表,逻辑更通顺:
import os print("---What to do?---\n") command = "" # 初始化动词历史列表,用空字符串占位避免初始索引判断报错 verbs = ["", ""] while True: command = input("What should I do now? ").lower().strip() # 优先处理控制指令,不进入动词变形、存储逻辑 if command == "help": print("\nJust give me verb!\n") continue elif command == "rest": print("\nFine, bye!") break elif command == "clear": os.system('cls') print("---What to do?---\n") continue # 处理动词去e加ing的变形规则 if command.endswith("e"): command = command[:-1] verbs.append(command) if verbs[-1] != verbs[-2]: print(f"\nOk I'm {command}ing\n") else: print(f"\nI'm tired of {command}ing\n")
内容的提问来源于stack exchange,提问作者Arian
相关产品推荐
相关产品推荐

