繁体   English   中英

如何从字典中打印随机项目?

[英]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字符串splithappy每个实例,为每个拆分部分替换不同的同义词,然后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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM