Я считаю, что начинающие программисты либо пишут слишком много кода или слишком мало кода.В случае вашей функции tower()
это слишком маленький код.Вы также используете переменную x
для двух разных целей - избавьтесь от привычки использовать однобуквенные имена переменных.Ваш вопрос «Пожалуйста, введите количество башен:» не нужен, поскольку количество введенных высот башен дает вам то же значение.Это ваша первая логическая ошибка:
x = str(h.split(","))
Мы хотим разбить эту входную строку на запятую, но мы хотим превратить ее в список чисел вместо строк.Один путь:
x = map(int, h.split(","))
Следующая проблема появляется в tower()
:
for x in range (0,n):
bob.forward(x)
Это повторное использование x
маскирует наши высоты, что вы действительно хотели, было что-то вроде:
for idx in range(n):
bob.forward(x[idx])
...
Но нам не нужно использовать индексацию, мы можем просто пройти x
.Доработка вашего кода с вышеуказанными исправлениями, некоторыми чертежами башен и некоторыми изменениями стиля:
from turtle import Turtle, Screen
WIDTH, HEIGHT = 400, 300
def ocean():
bob.setpos(-WIDTH/2, 0)
bob.color("midnightblue")
bob.begin_fill()
for _ in range(2):
bob.forward(WIDTH)
bob.right(90)
bob.forward(HEIGHT/2)
bob.right(90)
bob.end_fill()
def tower():
for height in heights:
bob.left(90)
bob.forward(height)
bob.right(90)
bob.forward(50)
bob.right(90)
bob.forward(height)
bob.left(90)
heights_string = input("Please enter height of towers: ")
heights = map(int, heights_string.split(","))
screen = Screen()
screen.setup(width=WIDTH, height=HEIGHT)
screen.bgcolor("orange")
bob = Turtle()
ocean()
tower()
bob.hideturtle()
screen.mainloop()
ИСПОЛЬЗОВАНИЕ
> python3 test.py
Please enter height of towers: 100,30,140,60,90,20,45
ВЫХОД
![enter image description here](https://i.stack.imgur.com/nzzlY.png)