Python 相同但没有循环

Python 相同但没有循环,python,loops,Python,Loops,我有一个叫做risar的模块。它做什么,就画什么。但这并不重要。我写了这段代码,背景是20朵花。代码是有效的,但在我看来非常尴尬。我希望它看起来更“花哨”,或者使用更少的循环。我对python比较陌生 import risar import random def makeFlowers(): flowers = [] for i in range(5): colors = ["black_flower.svg","blue_flower.svg", "brow

我有一个叫做risar的模块。它做什么,就画什么。但这并不重要。我写了这段代码,背景是20朵花。代码是有效的,但在我看来非常尴尬。我希望它看起来更“花哨”,或者使用更少的循环。我对python比较陌生

import risar
import random


def makeFlowers():
    flowers = []
    for i in range(5):
        colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"]
        for j in range(4):
            x = random.randint(20, (risar.maxX-20))
            y = random.randint(20, 300)
            flower = risar.picture(x, y, colors[i])
            flowers.append(flower)
    return flowers

flowers = makeFlowers()

首先,您将
color
变量设置为相同的列表,五次,以便从循环中删除该变量:

# Just set `colors` once
colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg","green_flower.svg","purple_flower.svg"]
for i in range(5): 
    # Do stuff
第二,你在毫无理由地使用两个循环。提示:如果您没有对任何东西使用
j
,那么它可能不应该有自己的循环

相反,把你想重复的代码拉到一起,然后重复那么多次。在本例中,您希望将代码块重复二十次,但使用嵌套循环只是为了确保在颜色中旋转。相反,请注意,您正在绘制的花的数量可以除以颜色列表的长度,并将整个内容重构为一个循环:

for i in range(20):
    x = random.randint(20, (risar.maxX-20))
    y = random.randint(20, 300)
    flower = risar.picture(x, y, colors[i//4]) # 0, 0, 0, 0, 1, 1, 1, 1, etc...
    flowers.append(flower)

首先,您将
color
变量设置为相同的列表,五次,以便从循环中删除该变量:

# Just set `colors` once
colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg","green_flower.svg","purple_flower.svg"]
for i in range(5): 
    # Do stuff
第二,你在毫无理由地使用两个循环。提示:如果您没有对任何东西使用
j
,那么它可能不应该有自己的循环

相反,把你想重复的代码拉到一起,然后重复那么多次。在本例中,您希望将代码块重复二十次,但使用嵌套循环只是为了确保在颜色中旋转。相反,请注意,您正在绘制的花的数量可以除以颜色列表的长度,并将整个内容重构为一个循环:

for i in range(20):
    x = random.randint(20, (risar.maxX-20))
    y = random.randint(20, 300)
    flower = risar.picture(x, y, colors[i//4]) # 0, 0, 0, 0, 1, 1, 1, 1, etc...
    flowers.append(flower)

首先,您将
color
变量设置为相同的列表,五次,以便从循环中删除该变量:

# Just set `colors` once
colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg","green_flower.svg","purple_flower.svg"]
for i in range(5): 
    # Do stuff
第二,你在毫无理由地使用两个循环。提示:如果您没有对任何东西使用
j
,那么它可能不应该有自己的循环

相反,把你想重复的代码拉到一起,然后重复那么多次。在本例中,您希望将代码块重复二十次,但使用嵌套循环只是为了确保在颜色中旋转。相反,请注意,您正在绘制的花的数量可以除以颜色列表的长度,并将整个内容重构为一个循环:

for i in range(20):
    x = random.randint(20, (risar.maxX-20))
    y = random.randint(20, 300)
    flower = risar.picture(x, y, colors[i//4]) # 0, 0, 0, 0, 1, 1, 1, 1, etc...
    flowers.append(flower)

首先,您将
color
变量设置为相同的列表,五次,以便从循环中删除该变量:

# Just set `colors` once
colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg","green_flower.svg","purple_flower.svg"]
for i in range(5): 
    # Do stuff
第二,你在毫无理由地使用两个循环。提示:如果您没有对任何东西使用
j
,那么它可能不应该有自己的循环

相反,把你想重复的代码拉到一起,然后重复那么多次。在本例中,您希望将代码块重复二十次,但使用嵌套循环只是为了确保在颜色中旋转。相反,请注意,您正在绘制的花的数量可以除以颜色列表的长度,并将整个内容重构为一个循环:

for i in range(20):
    x = random.randint(20, (risar.maxX-20))
    y = random.randint(20, 300)
    flower = risar.picture(x, y, colors[i//4]) # 0, 0, 0, 0, 1, 1, 1, 1, etc...
    flowers.append(flower)
差不多

colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"]
for color in colors:
    //You can do your second for here, no need to redeclare colors in each for, and color will be taking each value of the array
还有一件事,你最好用

xrange(limit)
不同之处在于xrange效率更高,因为它不创建数字列表,只创建一个序列生成器,这在重内存程序中非常重要,比如绘画程序

colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"]
for color in colors:
    //You can do your second for here, no need to redeclare colors in each for, and color will be taking each value of the array
还有一件事,你最好用

xrange(limit)
不同之处在于xrange效率更高,因为它不创建数字列表,只创建一个序列生成器,这在重内存程序中非常重要,比如绘画程序

colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"]
for color in colors:
    //You can do your second for here, no need to redeclare colors in each for, and color will be taking each value of the array
还有一件事,你最好用

xrange(limit)
不同之处在于xrange效率更高,因为它不创建数字列表,只创建一个序列生成器,这在重内存程序中非常重要,比如绘画程序

colors = ["black_flower.svg","blue_flower.svg", "brown_flower.svg", "green_flower.svg","purple_flower.svg"]
for color in colors:
    //You can do your second for here, no need to redeclare colors in each for, and color will be taking each value of the array
还有一件事,你最好用

xrange(limit)

不同之处在于xrange的效率更高,因为它不创建数字列表,只创建一个序列生成器,这在重载内存程序中非常重要,比如绘制一个

Factor out
colors
,因为它保持不变。这个问题似乎与主题无关,因为它是关于代码复查的。应该在代码审查stackexchange站点()上。我不知道它存在。谢谢你让我知道,谢谢你,我一定会用的!xDI会说这是一个主题:他在问如何更通俗地编写代码。itertools库有助于封装循环,就像这里的循环一样。别忘了我的地图。请参阅Factor out
colors
中我的显式无循环重写,因为它保持不变。这个问题似乎与主题无关,因为它是关于代码复查的。应该在代码审查stackexchange站点()上。我不知道它存在。谢谢你让我知道,谢谢你,我一定会用的!xDI会说这是一个主题:他在问如何更通俗地编写代码。itertools库有助于封装循环,就像这里的循环一样。别忘了我的地图。请参阅Factor out
colors
中我的显式无循环重写,因为它保持不变。这个问题似乎与主题无关,因为它是关于代码复查的。应该在代码审查stackexchange站点()上。我不知道它存在。谢谢你让我知道,谢谢你,我一定会用的!xDI会说这是一个主题:他在问如何更通俗地编写代码。itertools库有助于封装循环,就像这里的循环一样。别忘了我的地图。请参阅Factor out
colors
中我的显式无循环重写,因为它保持不变。这个问题似乎与主题无关,因为它是关于代码复查的。应该在代码审查stackexchange站点()上。我不知道它存在。谢谢你让我知道,谢谢你,我一定会用的!xDI会说这是一个主题:他在问如何更通俗地编写代码。