我需要一些有关拼布内部菱形的帮助。 主要问题: -代码质量-我在绘制三角形时不认为我的drawRhombuses是正确的,因为我无法真正为所有点编写代码。 -在菱形的外面,我真的有一个奇怪的三角形,如您在这里看到的:https://ibb.co/9w60DKx 最终结果应如下所示:https://ibb.co/N3HpNhC 如果有人有答案,如果您能向我解释代码,我将不胜感激。 这是我的拼凑而成:
VALID_COLOURS = ['red', 'blue', 'green', 'cyan', 'orange']
colours = ['', '', '']
def main():
size = getSize()
selectColours()
win = GraphWin("Patchwork", size*100, size*100)
drawPatches(win, size)
win.getMouse()
win.close()
def getSize():
while True:
size = ""
while not size.isdecimal():
size = input("Please enter a valid size between 2 - 9 for your patchwork: ")
if not size.isdecimal():
print("Only digits are allowed.")
size = int(size)
if 2 <= size <= 9:
break
print("The valid numbers are 2 - 9.")
return size
def selectColours():
for index in range(len(colours)):
colours[index] = validateColour(index + 1)
def validateColour(colourNumber):
colour = None
while True:
colour = input("Please pick 3 colours {0}: ".format(colourNumber))
if colour in VALID_COLOURS:
if not repetitiveColour(colour):
break
print("Cannot enter the same colour more than once.")
else:
print("The possible colours are:", ", ".join(VALID_COLOURS))
return colour
def repetitiveColour(colour):
return colour in colours
def drawLine(win, p1, p2, colour):
line = Line(p1, p2)
line.setOutline(colour)
line.draw(win)
def drawRectangle(win, p1, p2, colour):
square = Rectangle(p1, p2)
square.setFill(colour)
square.draw(win)
def drawRhombus(win,p1,p2,p3,colour):
rhombus= Polygon(p1,p2,p3,)
rhombus.setFill(colour)
rhombus.draw(win)
def drawPatchOne(win, position, colour):
x = position.getX()
y = position.getY()
for i in range(5):
drawLine(win, Point(x+50,y+50), Point(x + 100, y + 100 - i*20), colour)
drawLine(win, Point(x+50,y+50), Point(x + 100 - i*20, y + 100), colour)
drawLine(win, Point(x+50,y+50), Point(x, y + 100 - i*20), colour)
drawLine(win, Point(x+50,y+50), Point(x +i*20, y), colour)
drawLine(win, Point(x+50,y+50), Point(x + 100-i*20, y+i*20 ), colour)
def drawPatchTwo(win, position, colour):
x = position.getX()
y = position.getY()
drawRectangle(win, Point(x + 0, y + 0), Point(x + 100, y + 100), colour)
for i in range(5):
drawRectangle(win, Point(x + 20 + i*5, y + 0), Point(x + 20 , y +20), 'white')
drawRectangle(win, Point(x + 60 + i*5, y + 0), Point(x + 60 , y +20), 'white')
drawRectangle(win, Point(x + 20 + i*5, y + 40), Point(x + 20 , y +60), 'white')
drawRectangle(win, Point(x + 60 + i*5, y + 40), Point(x + 60 , y +60), 'white')
drawRectangle(win, Point(x + 20 + i*5, y + 80), Point(x + 20 , y +100), 'white')
drawRectangle(win, Point(x + 60 + i*5, y + 80), Point(x + 60 , y +100), 'white')
drawRhombus(win,Point(x+10+i*5, y+0), Point(x+40, y+10),Point(x+20, y+10),colour)
drawRhombus(win,Point(x+10+i*5, y+20), Point(x+40, y+10),Point(x+20, y+10),colour)
drawRhombus(win,Point(x+10+i*5, y+40), Point(x+40, y+50),Point(x+20, y+50),colour)
drawRhombus(win,Point(x+10+i*5, y+60), Point(x+40, y+50),Point(x+20, y+50),colour)
drawRhombus(win,Point(x+10+i*5, y+80), Point(x+40, y+90),Point(x+20, y+90),colour)
drawRhombus(win,Point(x+10+i*5, y+100), Point(x+40, y+90),Point(x+20, y+90),colour)
drawRhombus(win,Point(x+50+i*5, y+0), Point(x+80, y+10),Point(x+60, y+10),colour)
drawRhombus(win,Point(x+50+i*5, y+20), Point(x+80, y+10),Point(x+60, y+10),colour)
drawRhombus(win,Point(x+50+i*5, y+40), Point(x+80, y+50),Point(x+60, y+50),colour)
drawRhombus(win,Point(x+50+i*5, y+60), Point(x+80, y+50),Point(x+60, y+50),colour)
drawRhombus(win,Point(x+50+i*5, y+80), Point(x+80, y+90),Point(x+60, y+90),colour)
drawRhombus(win,Point(x+50+i*5, y+100), Point(x+80, y+90),Point(x+60, y+90),colour)
#
for i in range(5):
for j in range(5):
circle= Circle( Point(x +10+ j*20, y + 10 + i*20),5)
circle.draw(win)
circle.setFill("White")
def drawPatches(win, size):
for row in range(size):
for column in range(size):
if 0 < row < size - 1 and 0 < column < size - 1:
colour = colours[2]
elif row % 2 != column % 2:
colour = colours[1]
else:
colour = colours[0]
if row == column:
drawPatchOne(win, Point(row*100, column*100), colour)
else:
drawPatchTwo(win, Point(row*100, column*100), colour)
main()