[英]How to print random items from a dictionary?
大家。 我正在尝试完成基本任务。 该程序应允许用户键入短语。 如果该短语包含单词“ 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)
错误的原因是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"]))
在此过程中,您可能希望遍历字典并应用所有同义词,而不是显式查找每个键:
for key, replacements in thesaurus.items():
phrase = phrase.replace(key, random.choice(replacements))
最后,请注意,此代码将用相同的替换替换happy
所有实例。 我认为您想要的代码也在尝试这样做。 如果要用单独随机选择的同义词替换它们,则要复杂一些。 您可以循环phrase.find("happy", offset)
直到返回-1
,但是巧妙的技巧可能会使其更简单: split
字符串split
为happy
每个实例,为每个拆分部分替换不同的同义词,然后join
他们都回来了。 像这样:
parts = phrase.split("happy")
parts[:-1] = [part + random.choice(thesaurus["happy"]) for part in parts[:-1]]
phrase = ''.join(parts)
从(0..[size of list - 1])
生成一个随机数。 然后,访问列表的索引。 要获取列表的长度,只需执行len(list_name)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.