Ответы пользователя по тегу Python
  • Задачка с олимпиады, как решать?

    На олимпиаде по Мехмату - перебором?! Тут уж как в анекдоте "такие инженеры нам ... не нужны". А если бы в задаче было условие эвакуировать население Кипра (до миллиона человек) тремя дюжинами кораблей (до 500 пассажиров каждый) - тоже бы решали перебором?

    просто натолкните на мысль
    линейное диофантово уравнение с тремя неизвестными

    UPD:
    Прошу прощения: невнимателен - олимпиада "по информатике от мехмата" - видимо предполагалось решать именно перебором в циклах... негодую, но неправ (хотя ответ свой пока оставлю)
    Ответ написан
    Комментировать
  • Поменяйте местами первую и вторую половины списка. Как упростить?

    Ну, если нужно именно без срезов, то я бы предложил такой примитив:
    >>> a = ['q','w','e','r','t','y']
    >>> h = len(a)//2
    >>> for i in range(h):
    	a[i], a[h+i] = a[h+i], a[i]
    >>> a
    ['r', 't', 'y', 'q', 'w', 'e']
    Оговорка: раз Вы пишите "Поменяйте местами первую и вторую половины", очевидно, длина списа чётная (если возможна нечётная, нужно будет чуть усложнить).
    Ответ написан
    1 комментарий
  • Как разбить текст на предложения, а сложные предложения на простые в Python?

    Если исхожить из того, что предложения построены правильно (т.е. в том числе нет лишних пробелов, как в примере тут *? ";*), то не слишком мудрёно, можно сделать и так:
    delimeters = ['.', ':', ';', '?', '!']
    frase = 'Мама как-то сказала ему: "Жизнь прожить - не поле перейти. Сынок! Не права ли я?"; сидя одиноко у окна, он смотрел и обдумывал сказанное...'
    
    words = frase.split()
    sentences = []
    prev_word = 0
    for i in range(len(words)):
        if words[i][-1] in delimeters:
            sent = ' '.join(words[prev_word:i+1])
            sentences.append(sent)
            prev_word = i+1
    
    #Мама как-то сказала ему:
    #"Жизнь прожить - не поле перейти.
    #Сынок!
    #Не права ли я?";
    #сидя одиноко у окна, он смотрел и обдумывал сказанное...
    Но надо конечно же смотреть по задаче, и добавлять в delimeters ещё элементы. Так, к примеру, для прямой речи возможна конструкция "бла-бла", - сказал он. Её бы тоже разбить на два предложения, но данный код этого не сделает. Так что это скорее идея, в каком направлении думать, а допиливать ещё нужно, исходя из текстов.
    Ответ написан
    Комментировать
  • Как разрешить ввод пробела?

    Не <space>а "space":
    keys = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "BackSpace", "space"]
    так работает.

    А написание space в скобках <> - для непосредственного использования конструкцииsome_widget.bind("<space>", some_function)т.е. это не event.keysym
    Ответ написан
  • Как сделать вывод элементов списка/строки в одно слово?

    на примере функции шифрования (с минимальными изменениями, как у Вас):
    1. Вынести объявление из цикла;
    2. печать так же вынести из цикла;
    3. результат не "джойним": у нас и так срока в функции шифрования
    def ciph():
    
        string = str(input("Введите строку, которую надо зашифровать: "))
        key = int(input("Введите ключ шифровки: "))
    
        array = ''
        for i in string:
            i = ord(i)
            i += key
            i = chr(i)
            array += i
        print(array)

    А то у Вас, как уже заметил nukler в комментариях, в каждую итерацию, результат обнуляется. Ну и, конечно, вывод результата - единожды, в конце, а не после каждой буквы.

    В функции deciph() - тоже самое с выносом из тела цикла, но тут (в варианте со списком) ''.join(array) как раз пригодится вместо ошибочной "array[array]". Но использование списка в данном случае избыточно (разве что с образовательной т.з.)
    Ответ написан
    1 комментарий
  • Как сделать счётчик слов в виджете text tkinter?

    Что бы он выводил актуальную цифру в процессе набора текста, можно привязать функцию подсчёта знаков к нажатию клавиш на клавиатуре, как-то так:
    def count():
        textLen = str(len(text.get(1.0, END)))
        wordCounter["text"] = "Символов в тексте: " + textLen
    
    text.bind("<Key>", lambda e: count())
    Ответ написан
    Комментировать
  • Как работает код? Какие у него составляющие?

    Я бы принимая строки с полом ростом, составлял бы два списка: рост мальчиков и рост девочек. Потом отсортировал бы их по убыванию и сложил , чтобы получить список шеренги. После чего прошёлся бы по всему списку (начиная со второго элемента), сравнивая текущее значение роста с предыдущим, и если разница в росте больше предыдущего "рекорда", обновлял бы рекордную разницу. Вот, где-так :)
    Ответ написан
  • Как удобоваримо запускать python3 код на Windows?

    А можно pyinstaller'ом собрать EXE-шник с параметром "noconsole":

    pyinstaller --onefile --noconsole my_program.py

    Тогда запусктаь его можно будет и под виндой, и на любом компе даже без уставновленного Python. О процессе могу рассказать поподробней
    Ответ написан
    4 комментария
  • Как из json вытащить все ссылки на python?

    Вы обращаетесь только к первой позиции - потому и лишь одна ссылка. Попробуйте так:
    проходя по всем словарям списка data['editions'] генерировать список ссылок, проходя по всем словарям списка 'images', которым затем расширять итоговый список ссылок k
    k = []
    for i in data['editions']:
        im = [j['url'] for j in i['images']]
        k.extend(im)
    Ответ написан
    Комментировать
  • Ошибка в коде TypeError: 'int' object is not subscriptable, что делать?

    Вы обращаетесь по ключам, только не указываете, ключи какого словаря :) Так будет правильней:
    name = group['items'][0]['first_name']
    Ответ написан
  • Как можно сократить / оптимизировать такой код на Python?

    использование словаря поможет значительно сократить код:
    month = int(input())
    seasons = {0:'зима', 1:'весна', 2:'лето', 3:'осень', 4:'зима'}
    if 1 <= month <= 12: print(seasons[month//3])
    else: print('error')

    если ещё не знаком со словарями, во второй строке можно использовать аналогичный список
    seasons = ['зима', 'весна', 'лето', 'осень', 'зима']
    Ответ написан
    6 комментариев
  • Как скопировать домен на selenium?

    певое: нужно добавить адрес расположения у тебя файла chromedriver.exe

    второе: важно дождаться подгрузки на странице нужного тебе элемента - для этого используй WebDriverWait

    ну и третье: в присовении content1 - кавычки к имени тега забыл.

    В общем, у меня работает с таким кодом (значение к path введи своё):
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    
    path = 'C:\Python34\my_progs\chromedriver.exe'
    driver = webdriver.Chrome(executable_path=path)
    driver.get("https://gdz-putina.net/11-klass-algebra-mordkovich#task?t=prgrph-1-1")
    
    WebDriverWait(driver, 20).until(
                lambda d: d.find_element_by_class_name('task'))
    content = driver.find_element_by_class_name('task')
    
    WebDriverWait(content, 20).until(
                lambda d: d.find_element_by_tag_name('img'))
    content = content.find_element_by_tag_name('img')
    content.click()
    
    WebDriverWait(driver, 20).until(
                lambda d: d.find_element_by_tag_name('img'))
    content1 = driver.find_element_by_tag_name('img')
    src = content1.get_attribute('src')
    print(src)   # https://gdz-putina.net/attachments/images/tasks/000/001/887/0002/5a6491b599d46.png
    driver.quit()
    Ответ написан
    Комментировать
  • Для переменной какого типа можно определить начальное значение с помощью функции ввода input( )?

    Да, практически, для какой захочешь...
    >>> s = input('...')
    ...string
    >>> type(s)
    <class 'str'>
    >>> d = int(input('...'))
    ...42
    >>> type(d)
    <class 'int'>
    >>> set_ = set(input('...'))
    ...123
    >>> type(set_)
    <class 'set'>
    В меру фантазии
    Ответ написан
    Комментировать
  • Не понимаю, почему не выводит значение описанной функции в надпись?

    Во-первых, у тебя проблемка с областью видимости:
    добавь строку "global #NumSystem" в каждую def click#(event): - тогда присвоение будет происходить не локальной переменной, а той #NumSystem, в глобльном неймспейс, которая у тебя сейчас всё время остаётся = 0.

    Во-вторых, у тебя напутано в def clickGO(event):
    запрос идёт по fNumSystem, а текст формируется по ConvertFromBin(x, sNumSystem) - думаю, планировалось в соответствии, а то функция возвращает None.

    И третье, чтобы хоть что-то происходило я во всех btn##.bind("", click##) я подобовлял "<Button-1>" вместо пустых кавычек.

    Ну а вообще, чрезвычайная избыточность в коде и никакой архитектуры - старайся так не писать.
    Ответ написан
  • При сборке проекта пропадает картинка, как исправить?

    Когда я собирал свой проект в один файл (--onefile) через pyinstaller, помиимо использования resource_path (как уже написал Andy_U) я картинки также прописывал и в my_project.spec-файле в блоке datas в Analysis - datas=[('background.png', '.'), (...)...] - "загружать картинки в сам exe файл".

    И уже после этого запускал на сборку изменённый spec: "pyinstaller my_project.spec" - тогда всё работало.

    Если нужны подробности или пример - напишу дополнительно.
    Ответ написан
    3 комментария
  • Как решить уравнение с div без перебора?

    Если 4 и 7 в примере - это два параметра уравнения (a и b, соответственно), принимающие лишь целые положительные значения, то без перебора - запросто:
    def solve_equation(a,b):   # x - a(x div b) = b
        if a%1 + b%1 != 0:
            raise ValueError('both variables must have integer values')
        if 0 < a < b: x = a + b
        else: x = None
        return x
    В том смысле, что для любых a < b ответ: a + b. Для всех прочих - решение отсутствует.
    Ответ написан
    9 комментариев
  • Почему окно появляется на секунду и исчезает?

    dabiankolins1 , добавь последней строкой:
    turtle._root.mainloop()
    и всё заработает :)

    С ткинтером также: из py-файла работает, но чтобы в exe-шке окно задерживалось на экране и не исчезало тут же, необхожима аналогичная строчка.
    Ответ написан
    2 комментария
  • Можно ли вычислить это математическое выражение с суммой без использования цикла средствами Python?

    Возможно, я неверно понял вопрос (я уточнял в комментариях), но если всё воспринимать буквально, для решения такой задачи я бы использовал что-то вроде этого:
    from math import factorial as fact
    
    def sigma(n,x):
        if abs(x) in range(abs(n)+1):
            raise ValueError('check the arguments values ')
        else:
            return sum(
                [(-1)**(n-k)*fact(2*n)/fact(n+k)/fact(n-k)/(x-k)
                for k in map(lambda i: i-n, range(2*n+1))]
                )
    Ответ написан
  • Запуск EXE файла из Python и закрыть его через некоторое время?

    как я уже писал в комментарии, зависти от того, какой у Вас метод определения успешности завершения работы ЕХЕ-шки. Вот общий шаблон:
    from os import startfile
    from psutil import process_iter
    from time import sleep
    
    def is_completed(some_attribute):
        #if <your cheking method>: return True
        #else: return False
    
    startfile(some_file)
    
    while not is_completed(some_attribute):
        sleep(some_time)
    
    for proc in process_iter():
        if proc.name() == some_file.split("\\")[-1]:
            proc.kill()

    some_file - Ваш EXE файл
    some_time - временной интервал проверок завершения (на Ваше усмотрение)
    some_attribute - если проверки по наличию отчёта об исполнении, то имя отчёта для os.path.exists(some_attribute) или чтения отчёта с поиском заветной строчки "well done"
    Ответ написан
    Комментировать
  • Как получить путь к файлу Kivy(Python)?

    Либо задача не полностью сформулирована, либо всё предельно просто:
    from tkinter import filedialog
    
    fn = filedialog.askopenfilename()
    Ответ написан
    Комментировать