大家。我正在尝试完成一项基本任务。该程序应允许用户键入短语。如果短语包含单词“happy”或“sad”,则该单词应随后被同义词(存储在字典中)随机替换。然后应打印出新短语。我究竟做错了什么?每次我尝试运行它,程序崩溃。这是我得到的错误:
0_part1.py", line 13, in <module>
phrase["happy"] = random.choice(thesaurus["happy"])
TypeError: 'str' object does not support item assignment
这是我到目前为止所做的:
import random
thesaurus = {
"happy": ["glad", "blissful", "ecstatic", "at ease"],
"sad": ["bleak", "blue", "depressed"]
}
phrase = input("Enter a phrase: ")
phrase2 = phrase.split(' ')
if "happy" in phrase:
phrase["happy"] = random.choice(thesaurus["happy"])
if "sad" in phrase:
phrase["sad"] = random.choice(thesaurus["sad"])
print(phrase)
答案 0 :(得分:2)
您的错误原因是phrase
是一个字符串,字符串是不可变的。最重要的是,字符串是序列,而不是映射;您可以将它们编入索引或对它们进行切片(例如happy_index = phrase.find("happy"); phrase[happy_index:happy_index+len("happy")]
),但不能像字典一样使用它们。
如果要创建新字符串,将子字符串happy
替换为另一个字,请使用replace
方法。
没有理由先检查;如果找不到happy
,replace
将不执行任何操作。
所以:
phrase = phrase.replace("happy", random.choice(thesaurus["happy"]))
虽然我们正在使用它,但您可能希望循环而不是显式查找每个键,而是将 all 应用于同义词:
for key, replacements in thesaurus.items():
phrase = phrase.replace(key, random.choice(replacements))
最后,请注意,此代码将使用相同的替换替换happy
的所有实例。我认为你想要的代码也试图这样做。如果你想用一个随机选择的同义词替换它们,那就有点复杂了。你可以循环phrase.find("happy", offset)
直到它返回-1
,但是一个巧妙的技巧可能会使它变得更简单:split
每个happy
实例周围的字符串,替换为不同的同义词每个拆分部分,然后join
它们全部重新组合在一起。像这样:
parts = phrase.split("happy")
parts[:-1] = [part + random.choice(thesaurus["happy"]) for part in parts[:-1]]
phrase = ''.join(parts)
答案 1 :(得分:0)
从(0..[size of list - 1])
生成随机数。然后,访问列表的索引。要获得列表的长度,只需执行len(list_name)
。