Как убрать ссылку на число?

light_x, light_y, initial_tx, initial_ty= [int(i) for i in input().split()]

def movement(value_tor, value_light):
    if value_tor > value_light:
        if value_tor is initial_ty:
            return 'S'
        else:
            return 'E'
    if value_tor < value_light:
        if value_tor is initial_ty:
            return 'N'
        else:
            return 'W'
    return ''

print(
    movement(initial_ty, light_y) +
    movement(initial_tx, light_x)
)

Тору надо добраться до молнии. Движения осуществляются только при принте севера,юга,запада,востока(N,S,W,E) и их совмещений(NE,NW,SE,SW) .В функций movement принимает значения либо по игрикам либо по иксам.сначала она проверяет значение тора больше либо меньше значения молнии.затем проверяет по какой асе Тор должен двигаться если value_tor было задано initial_ty то возвращать 'N' или 'S', в ином случаи там initial_tx=>'E''W' если ни одна из ретурнов не случилась=>Тор сравнялся по асе и надо вернуть' '.Проблема: когда initial_tx,initial_ty равны они считаются одним и тем жим объектом поэтому проверка value_tor is initial_ty всегда выдаёт True. И получается что Тор должен идти на SS (south-south)Вопрос:как сделать так чтобы значения были одинаковые но ссылки были разные.initial_tx==initial_ty True.initial_tx is initial_ty False.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Как я понял конструкция if value_tor is initial_ty означает буквально: "первым параметром была переменная initial_ty". Это не работает, код внутри функции имеет доступ только к значениям параметров, но не к их именам. Чтобы код внутри функции что-то узнал про окружающий мир, это что-то должно быть передано как значение какого-то параметра.

Вот минимальная правка вашего кода:

initial_tx = input()  # 0
initial_ty = input()  # 0


def movement_y(value_tor, value_light):
    if value_tor > value_light:
        return 'S'
    if value_tor < value_light:
        return 'N'
    return '' 


def movement_x(value_tor, value_light):
     if value_tor > value_light:
        return 'E'
     if value_tor < value_light:
        return 'W'
    return '' 


print(movement_y(initial_ty, light_y) + movement_x(initial_tx, light_x))

Ещё один вариант:

initial_tx = input()  # 0
initial_ty = input()  # 0


def movement_y(value_tor, value_light, less, greater):
    if value_tor > value_light:
        return greater
    if value_tor < value_light:
        return less
    return '' 


print(movement(initial_ty, light_y, 'N', 'S') + movement(initial_tx, light_x, 'W', 'E'))

P.S. Сейчас initial_tx, initial_ty хранят строки '0', не числа 0. Это ошибка, которая позже вам доставит неприятности.

→ Ссылка