Python 乌龟:我怎样才能将最大和最小尺寸的圆圈与它们的颜色协调起来?
Python Turtle: how can I coordinate the maximum and minimum sized circle to thier colour?
这是一项学校任务我已经完成了除此任务之外的所有任务“确定最小和最大尺寸点的颜色并输出结果,例如最大尺寸的点为橙色,尺寸为 100”。我已经找到了最小和最大尺寸的圆圈 我只是不知道如何找到最大和最小尺寸圆圈的颜色以便我可以打印 ('The maximum size circle is',size,'and it is',颜色)
from turtle import *
import random
randomSize=[]
randomColour=[]
countr=0
countg=0
question=input('Do you want to run the program?')
while question=='yes':
#this function will calculate the minimum and maximum circle size form the list randomSize
def minMax(sizes):
minimum=maximum=sizes[0]
for i in sizes[1:]:
if i<minimum:
minimum=i
#im having trouble coordinating the circles size to its colour
elif i> maximum:
maximum=i
print('The maximum size of circles was',maximum)
print('The minimum size of circles was',minimum)
#this function is used to find out whether the there are an even or odd number of red or green
dots
def oddoreven(count,colour1):
result=count%2
if result==0:
print('There were an EVEN number of',colour1, 'dots',count)
else:
print('There were an ODD number of',colour1, 'dots',count)
number=int(input('How many dots do you want?'))
for i in range (number):
x=random.randint(-100,100)
y=random.randint(-100,100)
hideturtle()
penup()
colours=['pink','purple','black','red','green','blue']
colour=random.choice(colours)
if colour=='red':
countr+=1
elif colour=='green':
countg+=1
size=random.randint(0,100)
randomSize.append(size)
randomColour.append(colour)
totalarea=0
goto(x,y)
dot(size,colour)
print("There were",countr,"red dots and", countg,"green dots")
oddoreven(count=countr, colour1='red')
oddoreven(count=countg,colour1='green')
minMax(randomSize)
#this works out the cumulative area for all the values in the list of sizes
for i in randomSize[1:]:
area=3.14*(i**2)
totalarea=totalarea+area
print('The cumulative area for all of the circles is',totalarea)
question= input('Do you want to run the program again?')
由于您在列表中附加了值,我只能假设 randomSize[0] 是 randomColour[0] 的大小,依此类推。
randomSize.append(size)
randomColour.append(colour)
因为这些是平行数组:
randomSize.append(size)
randomColour.append(colour)
一个简单的解决方法可能是将 randomColour
也传递给 minMax()
并在循环时跟踪索引:
def minMax(sizes, colours):
minimum = maximum = sizes[0]
minColour = maxColour = colours[0]
for index, i in enumerate(sizes[1:], start=1):
if i < minimum:
minimum = i
minColour = colours[index]
elif i > maximum:
maximum = i
maxColour = colours[index]
print('The maximum size of circles was', maximum, "in", maxColour)
print('The minimum size of circles was', minimum, "in", minColour)
当然,当我们看到并行数组时,通常意味着缺少某种数据结构。除此之外,您的代码中还有错误,其中最明显的错误是:
randomSize.append(size)
# ...
dot(size,colour)
# ...
for i in randomSize[1:]:
area = 3.14 * (i**2)
dot()
方法将其 size
参数视为 直径 但在计算面积时,您将其视为 半径。 (turtle circle()
方法将半径作为其参数。)以下是我为解决上述问题和其他问题而对您的代码进行的修改:
import math
import turtle
import random
COLOURS = ['pink', 'purple', 'black', 'red', 'green', 'blue']
def minMax(diameters, colours):
''' calculate the minimum and maximum circle diameters and their colours '''
minimumDiameter = maximumDiameter = diameters[0]
minimumColour = maximumColour = colours[0]
for index, diameter in enumerate(diameters[1:], start=1):
if diameter < minimumDiameter:
minimumDiameter = diameter
minimumColour = colours[index]
elif diameter > maximumDiameter:
maximumDiameter = diameter
maximumColour = colours[index]
print("The maximum diameter of circles was", maximumDiameter, "in", maximumColour)
print("The minimum diameter of circles was", minimumDiameter, "in", minimumColour)
def oddOrEven(count, colour):
''' find out whether the there are an even or odd number of red or green dots '''
result = count % 2
if result == 0:
print("There were an EVEN number of", colour, "dots", count)
else:
print("There were an ODD number of", colour, "dots", count)
randomDiameters = []
randomColours = []
countRed = 0
countGreen = 0
answer = 'yes'
while answer.lower().startswith('y'):
number = int(input("How many dots do you want? "))
for _ in range(number):
x = random.randint(-100, 100)
y = random.randint(-100, 100)
turtle.hideturtle()
turtle.penup()
colour = random.choice(COLOURS)
diameter = random.randint(0, 100)
# parallel arrays
randomDiameters.append(diameter)
randomColours.append(colour)
turtle.goto(x, y)
turtle.dot(diameter, colour)
if colour == 'red':
countRed += 1
elif colour == 'green':
countGreen += 1
print("There were", countRed, "red dots and", countGreen, "green dots.")
oddOrEven(count=countRed, colour='red')
oddOrEven(count=countGreen, colour='green')
minMax(randomDiameters, randomColours)
# work out the cumulative area for all the values in the list of diameters
totalArea = 0
for diameter in randomDiameters:
area = math.pi * (diameter / 2) ** 2
totalArea += area
print("The cumulative area for all of the circles is", totalArea)
answer = input("Do you want to run the program again? ")
这是一项学校任务我已经完成了除此任务之外的所有任务“确定最小和最大尺寸点的颜色并输出结果,例如最大尺寸的点为橙色,尺寸为 100”。我已经找到了最小和最大尺寸的圆圈 我只是不知道如何找到最大和最小尺寸圆圈的颜色以便我可以打印 ('The maximum size circle is',size,'and it is',颜色)
from turtle import *
import random
randomSize=[]
randomColour=[]
countr=0
countg=0
question=input('Do you want to run the program?')
while question=='yes':
#this function will calculate the minimum and maximum circle size form the list randomSize
def minMax(sizes):
minimum=maximum=sizes[0]
for i in sizes[1:]:
if i<minimum:
minimum=i
#im having trouble coordinating the circles size to its colour
elif i> maximum:
maximum=i
print('The maximum size of circles was',maximum)
print('The minimum size of circles was',minimum)
#this function is used to find out whether the there are an even or odd number of red or green
dots
def oddoreven(count,colour1):
result=count%2
if result==0:
print('There were an EVEN number of',colour1, 'dots',count)
else:
print('There were an ODD number of',colour1, 'dots',count)
number=int(input('How many dots do you want?'))
for i in range (number):
x=random.randint(-100,100)
y=random.randint(-100,100)
hideturtle()
penup()
colours=['pink','purple','black','red','green','blue']
colour=random.choice(colours)
if colour=='red':
countr+=1
elif colour=='green':
countg+=1
size=random.randint(0,100)
randomSize.append(size)
randomColour.append(colour)
totalarea=0
goto(x,y)
dot(size,colour)
print("There were",countr,"red dots and", countg,"green dots")
oddoreven(count=countr, colour1='red')
oddoreven(count=countg,colour1='green')
minMax(randomSize)
#this works out the cumulative area for all the values in the list of sizes
for i in randomSize[1:]:
area=3.14*(i**2)
totalarea=totalarea+area
print('The cumulative area for all of the circles is',totalarea)
question= input('Do you want to run the program again?')
由于您在列表中附加了值,我只能假设 randomSize[0] 是 randomColour[0] 的大小,依此类推。
randomSize.append(size)
randomColour.append(colour)
因为这些是平行数组:
randomSize.append(size)
randomColour.append(colour)
一个简单的解决方法可能是将 randomColour
也传递给 minMax()
并在循环时跟踪索引:
def minMax(sizes, colours):
minimum = maximum = sizes[0]
minColour = maxColour = colours[0]
for index, i in enumerate(sizes[1:], start=1):
if i < minimum:
minimum = i
minColour = colours[index]
elif i > maximum:
maximum = i
maxColour = colours[index]
print('The maximum size of circles was', maximum, "in", maxColour)
print('The minimum size of circles was', minimum, "in", minColour)
当然,当我们看到并行数组时,通常意味着缺少某种数据结构。除此之外,您的代码中还有错误,其中最明显的错误是:
randomSize.append(size)
# ...
dot(size,colour)
# ...
for i in randomSize[1:]:
area = 3.14 * (i**2)
dot()
方法将其 size
参数视为 直径 但在计算面积时,您将其视为 半径。 (turtle circle()
方法将半径作为其参数。)以下是我为解决上述问题和其他问题而对您的代码进行的修改:
import math
import turtle
import random
COLOURS = ['pink', 'purple', 'black', 'red', 'green', 'blue']
def minMax(diameters, colours):
''' calculate the minimum and maximum circle diameters and their colours '''
minimumDiameter = maximumDiameter = diameters[0]
minimumColour = maximumColour = colours[0]
for index, diameter in enumerate(diameters[1:], start=1):
if diameter < minimumDiameter:
minimumDiameter = diameter
minimumColour = colours[index]
elif diameter > maximumDiameter:
maximumDiameter = diameter
maximumColour = colours[index]
print("The maximum diameter of circles was", maximumDiameter, "in", maximumColour)
print("The minimum diameter of circles was", minimumDiameter, "in", minimumColour)
def oddOrEven(count, colour):
''' find out whether the there are an even or odd number of red or green dots '''
result = count % 2
if result == 0:
print("There were an EVEN number of", colour, "dots", count)
else:
print("There were an ODD number of", colour, "dots", count)
randomDiameters = []
randomColours = []
countRed = 0
countGreen = 0
answer = 'yes'
while answer.lower().startswith('y'):
number = int(input("How many dots do you want? "))
for _ in range(number):
x = random.randint(-100, 100)
y = random.randint(-100, 100)
turtle.hideturtle()
turtle.penup()
colour = random.choice(COLOURS)
diameter = random.randint(0, 100)
# parallel arrays
randomDiameters.append(diameter)
randomColours.append(colour)
turtle.goto(x, y)
turtle.dot(diameter, colour)
if colour == 'red':
countRed += 1
elif colour == 'green':
countGreen += 1
print("There were", countRed, "red dots and", countGreen, "green dots.")
oddOrEven(count=countRed, colour='red')
oddOrEven(count=countGreen, colour='green')
minMax(randomDiameters, randomColours)
# work out the cumulative area for all the values in the list of diameters
totalArea = 0
for diameter in randomDiameters:
area = math.pi * (diameter / 2) ** 2
totalArea += area
print("The cumulative area for all of the circles is", totalArea)
answer = input("Do you want to run the program again? ")