我在一个学校项目中创建了一个岛屿的ASCII地图。有140多个变量用于打印岛上的地名
我不只是将名称放在文本中,因为我试图找到一种方法来获取用户输入并将该输入与变量匹配。然后将ASCII颜色代码及其原始字符串指定给该变量,以便在打印地图时显示与其他颜色不同的颜色
比如说:
map = x + """ ------------- """ + y
x = "x"
y = "y"
red = "\033[31m" #color code
place = input("Where do you want to go?: ")
如果用户输入“x”,则“x”应显示为红色
我使用了"""
而不是"
,因为我的实际地图由更多的线组成,我想指出,如果它有区别的话
我知道我可以用{
所以我想知道是否有一种方法可以循环使用这些变量,每次都能找到正确的变量
我认为字典是最好的选择,因为这是人们在我上一篇文章中建议的,但我不确定如何在实际的python代码中实现它
老师提到,我们不应该使用索引来跳过可变部分,而只是将颜色代码放在地图本身的正确单词之前
如果我理解正确,您可能在过去使用列表变量尝试过使用for循环
幸运的是词典的作用与列表几乎相同,只是它们不使用index:value引用(即list[index]=value)。他们使用key:value配对(dict[key]=value)
该语法使用大括号,如下所示: 字典{“key1”:value1,“key2”:value2
这为您提供了一种快速简便的方法来引用值,而无需循环加载项。不幸的是,听起来你得自己编字典了
读者注意:OP的指导老师对他们施加了人为的限制。这里演示的机制不是我建议在生产代码中使用的机制。有更好的方法可以获得类似的功能,即使用公共Python数据结构而不是单个全局变量。这种方法的一大缺点,除了它是一个黑客,是即使设置变量值可以简单地通过一个输入的名称,您将不得不改变代码添加新的“地方”。在生产代码中,地图和地图上的各个位置应作为输入数据输入到代码中。当地图或地点列表更改时,代码不必更改
知道你想要什么,我看了一眼,立刻发现确实有一种方法可以设置给定名称的全局变量的值。这种机制就是
globals()
调用。此调用返回一个字典,其中包含对所有全局变量的引用。键是变量名,值与变量的实际值相关联以下是给出问题代码的最基本示例:
测试运行1:
测试运行2:
请注意,添加的颜色代码会使输出从打印该变量值的点变为红色,直到输入结束
下面是一个更完整的示例,它同时使用颜色代码和“结束颜色”代码,因此只有变量的打印值是红色的。在本例中,您可以继续输入w、x、y或z中的1个,然后只需按Return键即可退出:
试运行:
请注意,您输入的每个变量名称都会导致该变量的值更改为显示为红色。发生这种情况是因为修改了实际全局变量的值,然后直接打印该变量的值。这是您要求的关键功能
注意:我不建议您在生产代码中使用这种机制。有更好的方法来做这些事情,即使用字典或列表。这种方法的一个缺点是,即使可以简单地设置变量值,您仍然必须更改代码以添加“位置”。在生产代码中,地图和地图上的各个位置应作为输入数据输入到代码中。当地图或地点列表更改时,代码不必更改
我希望这能满足你的需要。快乐编程
我想我明白了。所以我使用了上面提到的字典。我找到了包含与usr_输入匹配的字符串的变量,我将其值存储在另一个变量中,我们称之为“random”。我从字典中删除匹配变量,然后向字典中添加一个名称相同但值正确的新变量。所以代码看起来是这样的:
输出:
现在我们编辑这条格言:
输出:
现在是我现在不知道的部分,如果它满足限制条件。我不再将变量用作:
我从字典中获取值:
这将提供正确的输出。所以我不会放弃或改变这一切。我会让它这样,祈祷它没有任何问题。这完全是一种非正统的做事方式,但最终我学到了一些我一无所知的字典知识。我得到的唯一问题(可能会在课堂上问)是: 我真的不明白
list()
做什么?我只知道如果没有它,我会出现运行时错误除此之外,谢谢你们所有人的回答,并为我指明了正确的方向。我知道我的术语是如此错误,因为我谈论了很多我还没有完全理解的事情。(特别是我说的值、变量、键等部分)我真的认为我把它们搞砸了!希望我没有给你带来太多的背部疼痛:)
相关问题 更多 >
编程相关推荐