Как рассчитать какое расстояние получилось от начальной точки до места, где мы находимся после последнего шага?
У нас есть бесконечный цикл запроса от пользователя следующих данных "сторона шаги" (типо down 7 , up 10, right 1 и т.д.) Цикл обрывается, когда пользователь ничего не ввёл, но нажал ввод. Как рассчитать какое расстояние получилось от начальной точки до места, где мы находимся после последнего шага? Как понимаю, надо через пифагора, но реализовать не получается.
x = 0
y = 0
while True:
inp = input('move number:')
if not inp:
break
direction, steps = inp.split(' ')
steps = int(steps)
if direction == 'left' or 'right':
x = steps
if direction == 'up' or 'down':
y=steps
print((x**2+y**2)**0,5)
Ответы (2 шт):
Если я правильно понял вашу задачу, код должен быть таким
x = 0
y = 0
while True:
inp = input('move number:')
if not inp:
break
direction, steps = inp.split(' ')
steps = int(steps)
if direction == 'right':
x += steps
elif direction == 'left':
x-= steps
elif direction === 'down'
y -= steps
elif direction == 'up':
y += steps
print((x**2+y**2)**0,5)
Замечание
Оператор or используется для работы с логическими значениями. СТРОКА or СТРОКА приведет к тому, что строки будут приведены к булевым значениям, и только потом отработает оператор сравнения. Если проще, то правильно будет написать
direction == 'up' or direction == 'down'
А еще лучше
direction in ('up', 'down')
в python 3.10 был добавлен match, в вашем случае его можно использовать примерно так:
from math import hypot
x = 0
y = 0
while True:
match input('move number:').split():
case 'left', left: x-=int(left)
case 'right', right: x+=int(right)
case 'up', up: y+=int(up)
case 'down', down: y-=int(down)
case _: break
print(hypot(x,y))
>>> out
'''
move number:left 3
move number:up 4
move number:stop
5.0