Python Turtle活动以及所需的错误修复-已回答

问题描述

我已经找到了最小和最大尺寸的圆圈,只是我不知道如何找到最大和最小尺寸的圆圈的颜色,以便我可以打印(“最大尺寸的圆圈是',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? ")