Выдача чертежа в Python Turtle на основе пользовательского ввода - PullRequest
0 голосов
/ 11 июня 2018

Моя проблема в том, что моя высота переменной башни вообще не печатается, и я чувствую, что если это так, это не сработает.Я не могу понять, почему это не работает, пожалуйста, помогите.

Мой код:

import turtle
bob = turtle.Turtle()
turtle.setup(width = 400, height = 300)
turtle.bgcolor("orange")
n = int(input("Please enter number of towers: "))
h = (input("Please enter height of towers : "))
x = str(h.split(","))
def ocean():
    bob.setpos(-200, 0)
    bob.color("midnightblue", "midnightblue")
    bob.begin_fill()
    for x in range(1, 3):
        bob.forward(400)
        bob.right(90)
        bob.forward(150)
        bob.right(90)
    bob.end_fill()

def tower():
    bob.right(90)
    for x in range (0,n):
        bob.forward(x)


ocean()
tower()

1 Ответ

0 голосов
/ 11 июня 2018

Я считаю, что начинающие программисты либо пишут слишком много кода или слишком мало кода.В случае вашей функции 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

...