va1166, насчет 2. Что-то типа такого. Не уверен в правильности, но идею передаёт, надеюсь.
x = 0
def calc(event):
global x
x = 0
root.after(0, one_iteration)
def one_iteration():
global x
x = randrange (1,10,1)
print("x=",x)
canv.delete("canvtext")
canv.create_text(50, 50, font=("Verdana", 20), text=str(x), anchor=CENTER, tags=('canvtext'))
if x != 5:
root.after(0, one_iteration)
Akina, ну можно и так, конечно. Вообще, ваш подход будет лучше работать для разовых переносов, по типу "на следующей неделе вместо вторника работать в среду", что немаловажно...
А итерация тут и не требуется. Посчитать число полных недель, прошедших с первой даты, поделить с остатком на период, если остаток 0 - на этой неделе работаем. Думаю, всё можно уложить в один умеренно сложный WHERE.
Я бы попробовал описать "период обслуживания". Например, "в указанное время указанного дня недели, через каждые k недель, начиная с даты A и до даты B включительно". Тогда любое расписание (в том числе разовые заказы) можно будет свести к комбинации нескольких таких периодов. Соответственно получаем цепочку связей 1-многие: клиент - договор на обслуживание - период обслуживания.
При проверке конкретной даты, ищем периоды, для которых искомая дата попадает в интервал от A до B, а день недели совпадает с искомым. После этого - только проверить чередование недель (если это вообще требуется).
До кучи: PILовский fromarray() предназначен для загрузки изображения из некоторого файла в графическом формате, а из не массива пикселей. Из примера это довольно-таки ясно следует.
Посмотри в сторону frombytes().
NonameFromUkraine, я всё равно не понял зачем ты так делаешь.
image = pyautogui.screenshot(region=(514, 495, 264, 12))
В доках на pyautogui написано. что у тебя в переменной image будет объект Image из библиотеки PIL.
Окей, ты хочешь использовать cv2 для преобразования. Перегоняешь через numpy.array(). Получаешь массив данных пикселей, который понимают функции cv2, а потом уже над ним издеваешься как хочешь.
Зачем вообще обратно в PIL перегонять?
Кирилл Гусарев, я верно понял, что XAML - тот же XML, только более строгий чем enriched text? Если да, то он будет иметь те же недостатки, но в большей степени...
Adminx1, ну насчёт перекрашивания я написал выше.
Изменение размеров - тоже не такая уж проблема, только надо решить, как подгонять соотношение сторон. Тут либо обрезка, либо дополнение каким-то цветом.
1. сайт как-то обнаруживает разницу между селениумом, и обычным браузером. Можно начать с простых вещей, например, попробовать другой движок браузера, проверить User-Agent, и т.п.
2. А просто через браузер зайти удаётся? Может, по IP забанили?
AinzO, если с чужого, куда вашего бота не пригласят - используйте класс Client вместо Bot.
Он позволяет передать токен клиента вместо токена бота.
Токен клиента вроде как можно раздобыть, залогинившись от юзера через сайт и посмотрев запросы, которые делает браузер.
shinodaaa, А зачем ты слил вместе два цикла?
Цикл создания звёзд должен быть один, до цикла анимации.
Да и потом ерунда. Сто раз очищаешь экран? У тебя цикл по stars уже снаружи цикла по step.
Проверяй отступы, они в питоне значимы.
for step in range(100): #сколько кадров анимации сделать
turtle.clear() #тут нужно очистить экран
for star in stars: #перебираем звезды
Илья, не совсем.
Начало диапазона - длина l минус 1, т.е. последний элемент.
Шаг диапазона - минус 1, т.е. перебираем от больших к меньшим.
Конец диапазона - минус 1, но так как конец не включается в диапазон, то фактически остановимся на предыдущем значении, т.е. 0.
Просто введи в консоль питона list(range(10, -1, -1)), и увидишь.
Не понял - учись.
Сначала основы Питона, набросай хотя бы программу, где можно в консоль с клавиатуры ввести число, а она проведёт нужный расчёт.
Потом, как освоишь - простого бота, который на любое сообщение отвечает "привет". Это обычно есть в примерах.
Потом скомбинируй две программы.
Хоть бы язык/библиотеку написал. Я уж понимаю, что в гугле забанили, но без этого непонятно, на что ссылки кидать.
Впрочем, готовый код вряд ли найдется.
MinTnt, это вариант, но я вообще-то имел ввиду несколько другой аспект.
Когда ты дописываешь что-то в конец строки, что делает питон?
Выделяет память под новую строку (суммарной длины), потом копирует туда исходную строку, потом копирует туда дописываемую часть. Если исходная строка более не нужна, удаляет её. (это упрощение, но идею передаёт).
И так при каждом дописывании. Т.е. если ты к 100МБ строке дописываешь один символ, у тебя в какой-то момент будет занято два раза по 100МБ, а если дописываешь символы часто - то память будет постоянно выделяться/освобождаться.
А вот join() работает умнее. Если он может пройтись по списку строк, он это делает, суммирует их длины, выделяет блок нужного размера, и вторым проходом записывает содержимое в этот блок. Никаких многократных переносов, по крайней мере для списка строк.
Понятно, что на маленьких строках это не принципиально, но файлы имеют тенденцию разрастаться... поэтому в некоторых случаях может иметь смысл сразу использовать более эффективные инструменты. Просто на всякий пожарный.
Михаил,
Раз уж ты читаешь файл целиком в память, можно было использовать список строк, и сделать ''.join() (ну или '\n'.join()). Я думаю, это будет побыстрее.