Ваш код - это катастрофа. Отступы по большей части не существуют. Вы вызываете функции, которые не существуют. Вы передаете аргументы, которые игнорируете. Вы импортируете второй файл под одним именем, но вызываете его под другим именем. Вы повторяете фиксированные вычисления внутри циклов. И т.д.
Это пример написания слишком большого количества кода без каких-либо проверок, а затем с надеждой, что это сработает. Пишите маленькие чанки, тестируйте маленькие чанки, пишите больше маленьких чанков и проверяйте их и т. Д.
Вот переписывание вашего кода, чтобы он в основном функционировал:
Библиотека pattern.py
:
import turtle
from random import choice
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 800
COLORS = ["misty rose", "lavender", "blue", "gold", "forest green", "orange"]
def setup():
turtle.screensize(SCREEN_WIDTH, SCREEN_HEIGHT)
turtle.speed('fastest')
def reset():
turtle.clearscreen()
def getRandomColor():
return choice(COLORS)
def drawRectangle(centerX, centerY, width, height):
turtle.goto(centerX - width/2, centerY - height/2)
turtle.pd()
turtle.color(getRandomColor())
for _ in range(2):
turtle.forward(width)
turtle.left(90)
turtle.forward(height)
turtle.left(90)
def drawRectanglePattern(centerX, centerY, width, height, count):
rotation = 360 / count
for _ in range(count):
turtle.pu()
turtle.left(rotation)
drawRectangle(centerX, centerY, width, height)
def drawCirclePattern(centerX, centerY, radius, count):
pass
def drawSuperPattern(centerX, centerY, width, height, count):
pass
Основная программа, которая вызывает библиотеку:
import pattern
def main():
while True:
print("Choose a mode")
print("1) Rectangle Pattern")
print("2) Circle Pattern")
print("3) Super Pattern")
mode = int(input("Which mode do you want to play? 1, 2 or 3: "))
pattern.setup()
if mode == 1:
width = int(input("Enter width for the rectangles: "))
height = int(input("Enter height for the rectangles: "))
count = int(input("Enter how many rectangles you'd like in the pattern: "))
centerX, centerY = eval(input("Enter center position (x, y): "))
pattern.drawRectanglePattern(int(centerX), int(centerY), width, height, count)
elif mode == 2:
radius = int(input("Enter the radius for the circles: "))
count = int(input("Enter how many circles you'd like in the pattern: "))
centerX, centerY = eval(input("Enter center position (x, y): "))
pattern.drawCirclePattern(int(centerX), int(centerY), radius, count)
elif mode == 3:
width = int(input("Enter width for the super pattern: "))
height = int(input("Enter height for the super pattern: "))
count = int(input("Enter how many super patterns you'd like in the pattern: "))
centerX, centerY = eval(input("Enter center position (x, y): "))
pattern.drawSuperPattern(int(centerX), int(centerY), width, height, count)
print("Do you want to play again?")
print("1) Yes, and keep drawings")
print("2) Yes, and clear drawings")
print("3) No, I am all done")
response = int(input("Choose 1, 2, or 3: "))
if response == 1:
pass
elif response == 2:
pattern.reset()
else:
print("Thanks for playing!")
break
main()
Основная проблема, на которую следует обратить внимание, помимо заполнения отсутствующих функций, - избавить вашу программу от вызовов eval()
. Это не рутина, которую вы должны использовать, несмотря на любое удобство, которое она может предоставить.
ПРИМЕР ИСПОЛЬЗОВАНИЯ
> python3 test.py
Choose a mode
1) Rectangle Pattern
2) Circle Pattern
3) Super Pattern
Which mode do you want to play? 1, 2 or 3: 1
Enter width for the rectangles: 150
Enter height for the rectangles: 275
Enter how many rectangles you'd like in the pattern: 17
Enter center position (x, y): (25, 75)
Do you want to play again?
1) Yes, and keep drawings
2) Yes, and clear drawings
3) No, I am all done
Choose 1, 2, or 3: 3
Thanks for playing!
>
ПРИМЕР ВЫХОДА
![enter image description here](https://i.stack.imgur.com/CEZPn.png)