【问题标题】:How can I access a list through a "for" loop if the list's name is stored in a variable I want to use?如果列表的名称存储在我要使用的变量中,我如何通过“for”循环访问列表?
【发布时间】:2021-09-23 19:34:09
【问题描述】:

目前,我正在用 Python v3.9.5 编写一个在图表上绘制数据的程序。它主要工作,但我试图实现的功能之一是能够选择自己的配色方案。以前,我通过为每个单一配色方案使用一个“if”语句来做到这一点,但是使用 11 种配色方案会占用大量空间。这是我使用的原始代码;从现在开始,一切都将以“红色”配色方案展示。

if color == "Red":
        plotter.color(random.choice(Red))

这是一个名为“红色”的列表:

Red = ["IndianRed", "LightCoral", "Crimson", "Red", "FireBrick"]

另外,这是我导入的模块:

import turtle
from turtle import *
import random
from math import floor

您可能想知道为什么我从 turtle 导入了两次东西,答案是没有星号的东西,填充命令会中断。我认为我不应该删除它。

我正在编写的函数有五个参数:fill、color、square、x、y。 “颜色”是我想用来在函数内部分配配色方案的那个;它是这样定义的:

colorscheme = input("What color scheme would you like to use? ")

当我们运行函数时,“colorscheme”被设置为参数“color”。我正在尝试使用“for”循环使颜色循环通过,因此如果用户从左到右绘制数据,点将是不同的,但我尝试的方法不起作用:

for i in color:
        plotter.color(i)

我认为问题在于 Python 正在寻找一个名为“color”的列表,并且在找不到时会感到困惑,即使“color”是存储列表名称的变量。这是当我要求红色配色方案然后尝试绘制一个点时 shell 给我的错误:

Traceback (most recent call last):
  File "/Users/peytonhemann/Documents/Ridiculous Programs/Plotterv3.py", line 179, in <module>
    plotPoint(isfilled, colorscheme, graphsize, xvalue, yvalue)
  File "/Users/peytonhemann/Documents/Ridiculous Programs/Plotterv3.py", line 113, in plotPoint
    plotter.color(i)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/turtle.py", line 2217, in color
    pcolor = self._colorstr(pcolor)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/turtle.py", line 2697, in _colorstr
    return self.screen._colorstr(args)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/turtle.py", line 1159, in _colorstr
    raise TurtleGraphicsError("bad color string: %s" % str(color))
turtle.TurtleGraphicsError: bad color string: R

如何指定我说的是存储在“color”中的字符串,而不是“color”本身?另外,如果我做错了,有没有一种完全不同的方法可以让一个配色方案的颜色循环通过,同时每个配色方案只使用一段代码?

而且,只是一个免责声明,我还在学习 Python,所以如果我做错了一切或者答案非常简单,请不要在 cmets 中对我施加压力。这也是我在这里的第一个问题,所以我可能没有你们需要的所有信息。不过,如果需要,我会回复您并提供有关我的程序的更多信息。感谢您的帮助!

【问题讨论】:

  • 如果你的代码在没有from turtle import * 的情况下无法运行,这意味着你从没有turtle. 前缀的turtle 模块中引用了一些东西。 … import * 的问题在于它可能会导入你不知道的东西,并且可能会破坏你自己的同名变量——这使得调试更加困难。

标签: python list for-loop variables


【解决方案1】:

在可变颜色中,您传递“红色”,在循环中将被理解为 ["r","e","d"]。

你应该用你想要的颜色列表制作一个字典。 试试这个:

colors = {}
colors['red'] = ["IndianRed", "LightCoral", "Crimson", "Red", "FireBrick"]

然后

for i in colors[color]:
    plotter.color(i)

【讨论】:

  • 感谢您的帮助!这确实有效……主要是。虽然颜色选择效果很好,但颜色并没有改变;我用“蓝色”配色方案绘制了五个点,它们都是相同的颜色;然后我用“All”绘制了一些,它在每种颜色中快速循环,直到最后一个。循环遍历每个列表后,代码似乎只选择每个列表的最后一种颜色。有什么办法可以在保留您建议的代码的同时解决这个问题?
【解决方案2】:

一个好的解决方案是使用名称字典。

如果您确定不能执行上述操作,请再次检查,如果仍然确定,则可以执行此操作:

if var_name in vars():
    my_var = vars()[var_name]
elif var_name in globals():
    my_var = globals()[var_name]
else:
    my_var = None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 2023-04-11
    • 2015-08-24
    • 1970-01-01
    • 2020-01-16
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多