问题描述
我已经找到了最小和最大尺寸的圆圈,只是我不知道如何找到最大和最小尺寸的圆圈的颜色,以便我可以打印(“最大尺寸的圆圈是',size,'它是',颜色)。感谢修复了我的代码的人,不再需要其他答案。尽管第13行在他们的代码中不起作用,但它的简化版本仍然可以。
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',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)
,
由于这些是 parallel 数组:
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,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,maximumColour)
print("The minimum diameter of circles was",minimumDiameter,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",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? ")