У меня есть вопрос относительно циклов и функций, поэтому список значений, которые, как три входные переменные, которые являются значениями, например 0-5 или направления (Запад, Север и т.д.), Я не уверен, правильно ли я использую инструкцию If. Я сделал что-то неправильно с командой цикла или функцией?
Пример входных переменных массива, но в наборе данных нет установленного предела:
['Start', 'Bottom right', 1]['South', 1, 1], ['North', 3, 4], ['West', 4, 0], ['West', 2, 0], ['South', 3, 4]
Если я запустил функцию, она всегда будет давать мне еще функцию и не будет следовать ни одной из команд.
def follow_path(a):
legend() #draw legend
for draw in a:
direction(a[0])
location(a[1])
choosetoken(a[2])
def location(corner):
if corner == 'Top left':
goto(0,600)
if corner == 'Top right':
goto(600,600)
if corner == 'Bottom left':
home()
if corner == 'Bottom right':
goto(600,0)
if corner == 'Center':
goto(300,300)
if corner == 1:
forward(100)
if corner == 2:
forward(200)
if corner == 3:
forward(300)
if corner == 4:
forward(400)
if corner == 5:
forward(500)
else:
print ("Check input '1' is correct or not")
def direction(direction):
if direction == 'West':
setheading(180)
if direction == 'East':
setheading(0)
if direction == 'North':
setheading(90)
if direction == 'West':
setheading(270)
if direction == 'Start':
home()
else:
print ("Check input '0' is correct or not")
def choosetoken(a): #Draw shapes
if a == 0:
youtube()
elif a == 1:
chrome()
elif a == 2:
googledrive()
elif a == 3:
gmail()
elif a == 4:
photo()
else:
print ("Token Value out of range, check if input '2' is correct or not")
Прежде всего, порядок, в котором следуют следующие утверждения:
if condition:
doSomething()
elif anotherCondition:
doSomethingDifferent()
elif anotherAnotherCondition:
doSomethingDifferentAgain()
else: #otherwise - if the above conditions don't satisfy(are not True)
doThis()
Во-вторых, В цикле for есть проблема, когда вы передаете список a в follow_path(), а затем передаете первый и третий элементы списка в направлении, местоположении и choosetoken.
def follow_path(a):
for draw in a:
direction(a[0])
location(a[1])
choosetoken(a[2])
def direction(thing):
print("direction " + str(thing))
def location(thing):
print("location " + str(thing))
def choosetoken(thing):
print("choosetoken " + str(thing))
a = [['Start', 'Bottom right', 1],['South', 1, 1], ['North', 3, 4], ['West', 4, 0], ['West', 2, 0], ['South', 3, 4]]
follow_path(a)
Это было предназначено? или вы хотели что-то вроде этого;
def follow_path(a):
for draw in a:
direction(draw[0])
location(draw[1])
choosetoken(draw[2])
def direction(thing):
print("direction " + str(thing))
def location(thing):
print("location " + str(thing))
def choosetoken(thing):
print("choosetoken " + str(thing))
a = [['Start', 'Bottom right', 1],['South', 1, 1], ['North', 3, 4], ['West', 4, 0], ['West', 2, 0], ['South', 3, 4]]
follow_path(a)
Что происходит, вы повторяете список a; и выбор нулевого, первого и второго элементов с каждой итерации.
Итак, первая итерация будет ["Старт", "Внизу справа", 1], я выбираю нулевой, первый и второй; "Пуск", "Внизу справа", 1 соответственно, затем перейдите к следующей итерации, которая будет ["Юг", 1, 1], сделает то же самое и так далее.
Надеюсь, это поможет :)
elif
не простоif
. Каждыйif
запускает совершенно новое выражение. Ваша текущая логика будет проверять каждый операторif
,if
, если любой из операторовif
перед последним равенTrue
то is также попадет в предложениеelse
последнего оператораif
потому что это будетFalse
. Примечание: вы правильно используетеelif
в последней функцииchoosetoken
. Вы можете также захотеть исследовать, какdict
использование в качестве механизма рассылки вместо множества операторовif
.