Функция Python несколько операторов IF?

1

У меня есть вопрос относительно циклов и функций, поэтому список значений, которые, как три входные переменные, которые являются значениями, например 0-5 или направления (Запад, Север и т.д.), Я не уверен, правильно ли я использую инструкцию If. Я сделал что-то неправильно с командой цикла или функцией?

Пример входных переменных массива, но в наборе данных нет установленного предела:

['Start', 'Bottom right', 1]['South', 1, 1], ['North', 3, 4], ['West', 4, 0], ['West', 2, 0], ['South', 3, 4]

Если я запустил функцию, она всегда будет давать мне еще функцию и не будет следовать ни одной из команд.

Изображение 174551

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")
  • 3
    Тебе нужен elif не просто if . Каждый if запускает совершенно новое выражение. Ваша текущая логика будет проверять каждый оператор if , if , если любой из операторов if перед последним равен True то is также попадет в предложение else последнего оператора if потому что это будет False . Примечание: вы правильно используете elif в последней функции choosetoken . Вы можете также захотеть исследовать, как dict использование в качестве механизма рассылки вместо множества операторов if .
  • 0
    Было бы полезно, если бы в сообщении else было напечатано несоответствующее входное значение вместо того, чтобы просто сказать «не совпадает».
Показать ещё 4 комментария
Теги:
for-loop
if-statement

1 ответ

1
Лучший ответ

Прежде всего, порядок, в котором следуют следующие утверждения:

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], сделает то же самое и так далее.

Надеюсь, это поможет :)

  • 0
    Привет, оба примера совпадают с тем, что я вижу?
  • 0
    Хороший ответ. Но использование dict вместо списков было бы более питонным, я думаю.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню