Python кодирования нужна помощь - PullRequest
0 голосов
/ 06 июня 2018

У меня проблемы с моим кодом, я не знаю, что я могу сделать.В моем коде есть переменная "bheight", и он автоматически разбивается на части (что я кодировал и это хорошо), но я хочу, чтобы при каждом выполнении кода "def Building ():" он добавлял 1 к bheight [0], поэтомукогда он повторяется в следующий раз, он будет выше [1].

import turtle
turtle.bgcolor("orange")

blist = input('Please enter builidng heights e.g. "50 30 60"')
leo = turtle.Turtle()
bsplit = blist.split()
bheight = list(map(int, bsplit))
size = len(bsplit)

def Water():
    leo.penup()
    leo.goto(-200,0)
    leo.fillcolor('midnightblue')              
    leo.begin_fill()
    for a in range (1,3):
        leo.forward(400)
        leo.right(90)
        leo.forward(150)
        leo.right(90)
    leo.end_fill()
    leo.pendown()

def Building():
    for x in range (0,int(size)):
        leo.fillcolor('darkslategrey')
        leo.begin_fill()
        leo.left(90)
        leo.forward(bheight[-1+1])
        leo.right(90)
        leo.forward(20)
        leo.right(90)
        leo.forward(bheight[-1+1])
        leo.left(90)
        leo.end_fill()



def Reset():
    leo.towards(leo)  

Water()
Building()

Ответы [ 2 ]

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

Я согласен с исправлением индекса @ maverick, но в первую очередь не вижу необходимости в индексе.Вместо:

for x in range (0,int(size)):
    ...
    leo.forward(bheight[x])

, которое действительно должно быть:

for x in range(size):
    ...
    leo.forward(bheight[x])

почему бы просто не сделать:

for height in bheight:
        ...
        leo.forward(height)

Переработанный код с этим и различными другими стилями исправления:

from turtle import Turtle, Screen

def Water():
    leo.penup()
    leo.setx(-200)
    leo.fillcolor('midnightblue')

    leo.begin_fill()

    for _ in range(2):
        leo.forward(400)
        leo.right(90)
        leo.forward(150)
        leo.right(90)

    leo.end_fill()

    leo.pendown()

def Building():
    leo.fillcolor('darkslategrey')

    for height in bheight:
        leo.begin_fill()
        leo.left(90)
        leo.forward(height)
        leo.right(90)
        leo.forward(20)
        leo.right(90)
        leo.forward(height)
        leo.left(90)
        leo.end_fill()

blist = input('Please enter building heights e.g. "50 30 60": ')
bsplit = blist.split()
bheight = list(map(int, bsplit))

screen = Screen()
screen.bgcolor("orange")

leo = Turtle()

Water()
Building()

screen.mainloop()
0 голосов
/ 06 июня 2018

Измените код сборки def: -

def Building():
    for x in range (0,int(size)):
        leo.fillcolor('darkslategrey')
        leo.begin_fill()
        leo.left(90)
        leo.forward(bheight[x])
        leo.right(90)
        leo.forward(20)
        leo.right(90)
        leo.forward(bheight[x])
        leo.left(90)
        leo.end_fill()

То, что происходило в вашем коде, заключалось в том, что каждый раз, когда вы выполняете -1 + 1, вы получите значение по 0-му индексу. Вместо этого просто добавьте 'x'.

...