Питонисты петухисты, поясняйте за свою ебалу. Я сишник-байтоеб. Ковыряюсь с вашей змеей. Нужно менять переменную внутри функции (не ее локальную копию). В си для этого были божественные указатели. А тут что?
>>213110784 (OP)Ты шиз. Твой высер дальше первого слова прочитать невозможно. Впервые такое тут вижуСъёбывай отсюда, даун. Ты пьян.
>>213110784 (OP)>менять переменную внутри функции (не ее локальную копию). Не передавай переменную в функцию а просто используй глобальную
>>213110784 (OP)> Я сишник-байтоебТы студентота лаба1. Иначе бы был в состоянии пользоваться гуглом и документацией.
>>213111150то, что внешняя переменная меняется при выполнении функции - это ты называешь никаких побочек?
>>213111931Да, я уже понял. Типа модификатор global обозначает, что мы берем x из пространства глобальных переменных (общего кода), а не создает локальную копию. Но как быть при вложенных вызовах функции? Ща покажу скрин
>>213112062Называть такое сайд-эффектом - это как называть сайд-эффектом вызов функции вввода в функции
Знатоки расскажите как создать демона на питоне в винде и как ему передавать какую-либо информацию (не сигналы) ?
>>213112150сайд-эффект - это когда внешний мир меняется под действием твоей функции. Это не "как что-то там если бы что-то там". Это вполне себе конкретное, блять, определение.
>>213111790>>213111931Вот. Надо чтоб изменение x и y в control прилетало в graphics. Как реализовать?
>>213112353Я про то, что ты говоришь, будто сайд-эффект - это что-то неебически плохое. У тебя по сути бОльшая половина функции в стандартных либах с сайд-эффектами, ибо там хендлеры, память, изменение внешних данных
>>213112573как вариант не мудрить ничего ни с какими глобалами, а передавать в функцию массивфункция будет его чекать и как там появятся значения (или изменятся) будет что-то там делать
>>213112573Рогалик на питоне пишешь?Можно просто без передачи х и у менять глобалкиИли передавать объект, у которого менять переменные
>>213112806>функция будет его чекать и как там появятся значения (или изменятся) будет что-то там делатьНе понял. Неявные вызовы что ли в питоне есть?>как вариант не мудрить ничего ни с какими глобалами, а передавать в функцию массивЯ, вроде, пробовал уже. Там синтаксическую ошибку выбивает при описании функции, мол, не может быть параметр массивом
>>213112868Рогалик или змейку какую-нибудь, да. Чисто чтобы освоить язык хоть чуть-чуть. А то буквально только начал>Можно просто без передачи х и у менять глобалкиМожно, но такой себе варик. Нарушает структуру и целостность кода>Или передавать объект, у которого менять переменныеПоподробнее можно?
>>213112895>>213113109>>213113130А, все, у вас ебать так можно сделать. Мощно. В сишке хуй пососешь с такими штуками. Ща попробую. Я просто не знал, что ретернить можно несколько параметров. Думал, это троллинг
>>213110784 (OP)>божественные указателиХорошо пошутил. Проблема на миллиард долларов, которую везде пытаются заткнуть у него оказывается божественная фича.
>>213112573Блять ну очевидно же что надо писатьKey= input()X = x + updateX(key)Y = y + updateY(key)Ну или божественный списокX,y = и далее по текстуЗа такой код что у оп и на С надо канделябром бить
>>213113953Чем это проблема? Указатели это маст-хев. Питон выглядит глупо со своей концепцией "= это не инициализация, а ссылка". А еще более глупо выглядит какой-нибудь C#, у которого инициализация структуры struct foo - это foo my, а инициализация класса class foo - это foo my = new foo();То есть оператор присваивания работает по-разному в зависимости от сущности. В случае со структурой в качестве инициализатора, а в случае с классом - как связыватель для ссылки. Нелогично.В си логично: мы всегда знаем, где сущность, а где указатель на сущность.
>>213114073Сириосли? Зачем делать отдельный апдейт под ЭТО? В детстве на компе много оперативки было?
>>213113389>>213110784 (OP)pastebin[dot]com/3Bk8NGRMЯ нихера не понял что ты сделать пытаешься, но попробовал предположить, это то что тебе нужно ?
>>213114426В питоне всё объект. Присваивание это всегда ссылка. Инициализация не включена в присваивание. Можешь считать что литерал это инициализатор нового объекта, new.
>>213110784 (OP)В питоне нет передачи по значению, там все по ссылке. Изменишь параметр внутри, он измениться и снаружи.
>>213112573*фиксд#!/usr/bin/pythonimport osimport timeimport keyboarddef control(x:int, y:int): key = keyboard.read_key() if key == "a" and x > 0: x -= 1 elif key == "d": x += 1 elif key == "s": y += 1 elif key == "w" and y > 0: y -= 1 return (x,y) def graphics(x, y): spaces = 0 lines = 0 while lines < y: print() lines += 1 while spaces < x: print(" ", end = "") spaces += 1 print("@") time.sleep(0.1) (x,y) = control(x, y) os.system("clear") return((x,y)) x = int(input())y = int(input()) while True: (x,y) = graphics(x,y)
>>213114426> В си логично: мы всегда знаем, где сущность, а где указатель на сущность.На самом деле это немного по другому: - вот число, это число - вот число, это символ - вот число, это адрес другого числа - вот число, это хуй знает что так как void *Просто охуенно удобно, спасибо.
>>213110784 (OP)> В си для этого были божественные указателиНе указатели, а ссылки. Потому что ты можешь менять указатель инкремируя и декримируя, при этом в основной программе он не изменится, если не передал по ссылке. Делетант хуев.
>>213114551Тут можно как угодно писать. Суть в принципе, что определяешь функции без сайдэффектов.Не надо дергать инпут, вот просто не надо.
>>213114844>вот число, это хуй знает что так как void *Меньше знаешь - крепче спишь.А вообще, гибко же. В каком-то смысле, грубо говоря, это дайтайпинг нативно в Си
>>213114955Я тогда ваще не понял. Какая разница, делать условный оператор в control или вызывать внутри control еще одну функцию?
>>213110784 (OP)Иди учись программировать, сайд эффекты он нам тут собрался делать. Может у тебя ещё объекты не единственную ответственность имеют, июнь?
>>213114870Не, wasd всё равно печатались, но потом исчезали, ибо экран очищается. Если увеличить частоту обновления (1 мс, допустим), то они не особо будут заметны (хмм, а что, если после ввода координат перенаправить stdin в пизду...). А так это вообще первое подходящее решение со стаковерфлоу. Я просто предположил, что ты хочешь сделать, ибо input() читает только по энтеру, а ты скорее всего, чтобы просто по нажатию. Встроенной функции getch() я не нашёл, поэтому пришлось импортировать библиотеку keyboard, которая в винде и лине можно установить с помощью pip.Самый цимес ещё в этом:Traceback (most recent call last): File "./2ch.py", line 36, in <module> (x,y) = graphics(x,y) File "./2ch.py", line 29, in graphics (x,y) = control(x, y) File "./2ch.py", line 7, in control key = keyboard.read_key() File "/usr/lib/python3.8/site-packages/keyboard/__init__.py", line 935, in read_key event = read_event(suppress) File "/usr/lib/python3.8/site-packages/keyboard/__init__.py", line 924, in read_event hooked = hook(queue.put, suppress=suppress) File "/usr/lib/python3.8/site-packages/keyboard/__init__.py", line 461, in hook append(callback) File "/usr/lib/python3.8/site-packages/keyboard/_generic.py", line 67, in add_handler self.start_if_necessary() File "/usr/lib/python3.8/site-packages/keyboard/_generic.py", line 35, in start_if_necessary self.init() File "/usr/lib/python3.8/site-packages/keyboard/__init__.py", line 196, in init _os_keyboard.init() File "/usr/lib/python3.8/site-packages/keyboard/_nixkeyboard.py", line 113, in init build_device() File "/usr/lib/python3.8/site-packages/keyboard/_nixkeyboard.py", line 109, in build_device ensure_root() File "/usr/lib/python3.8/site-packages/keyboard/_nixcommon.py", line 174, in ensure_root raise ImportError('You must be root to use this library on linux.')ImportError: You must be root to use this library on linux.
Раз уж в треде есть питонознатаки, может кто пояснить за идеалогию питона, типа как должны изменяться объекты, что на что воздействовать, какие связи и прочее?
>>213115084Это даже и близко не duck typing, ибо из void * ты не можешь сделать никаких выводов, чтобы сказать, что это "утка".
>>213115170Update любая ее реализация не должна опрашивать клавиатуру.Тогда появляется возможность писать тесты и некоторая гибкость.Input же по идее вместо кода конкретной клавиши должен возвращать действие ( вверх там или вниз)Тогда мы отвязываемся от конкретных клавиш