Ответы пользователя по тегу Python
  • Вытянуть строки по поиску в таблицах?

    Тебе нужно веб хук закинуть в Google sheets. getMe() и setWebhook() главные.
    Потом через @ сможешь вызывать нужные тебе штуки.
    На ютубе есть видео "Telegram Bot Tutorial - 1 - Setting up the Bot and Google Apps Script".

    // добавь в Google Apps Script
    var token = "";     // 1. FILL IN YOUR OWN TOKEN
    var telegramUrl = "https://api.telegram.org/bot" + token;
    var webAppUrl = ""; // 2. GOOGLE WEB APP ADDRESS
    var ssId = "";      // 3. SPREADSHEET ID https://docs.google.com/spreadsheets/d/{ID_HERE}/edit
    var adminID = "";   // 4. Твой Telegram ID для дебага
    
    function getMe() {
      var url = telegramUrl + "/getMe";
      var response = UrlFetchApp.fetch(url);
      Logger.log(response.getContentText());
    }
    
    function setWebhook() {
      var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
      var response = UrlFetchApp.fetch(url);
      Logger.log(response.getContentText());
    }
    
    function sendText(id,text) {
      var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + encodeURIComponent(text);
      var response = UrlFetchApp.fetch(url);
      Logger.log(response.getContentText());
    }
    
    function doGet(e) {
      return HtmlService.createHtmlOutput("Hi there");
    }
    
    function doPost(e) {
      try {
        // this is where telegram works
        var data = JSON.parse(e.postData.contents);
        var text = data.message.text;
        var id = data.message.chat.id;
        var name = data.message.chat.first_name + " " + data.message.chat.last_name;
        var answer = "Hi " + name;
        sendText(id,answer);
        SpreadsheetApp.openById(ssId).getSheets()[0].appendRow([new Date(),id,name,text,answer]);
        
        if(/^@/.test(text)) {
          var sheetName = text.slice(1).split(" ")[0];
          var sheet = SpreadsheetApp.openById(ssId).getSheetByName(sheetName) ? SpreadsheetApp.openById(ssId).getSheetByName(sheetName) : SpreadsheetApp.openById(ssId).insertSheet(sheetName);
          var newText = text.split(" ").slice(1).join(" ");
          sheet.appendRow([new Date(),id,name,newText,answer]);
          sendText(id,"your text '" + newText + "' is now added to the sheet '" + sheetName + "'");
        }
      } catch(e) {
        sendText(adminID, JSON.stringify(e,null,4));
      }
    }
    Ответ написан
    Комментировать
  • Как разделить текст по ключевым словам в Python?

    Если я правильно понял твою цель.
    Задача решается и без регекспов в несколько строчек.
    Способ 1: -создай словарь и положи в него всё, что нужно.
    Вместо точек остальные дни.
    shedict = {"понедельник":[],"вторник":[], ..., "суббота":[], "воскресенье":[]}
    for i in range(len(text)):                #text -> список строк из расписания.
        if text[i].split()[0] in shedict:
            key = text[i].split()[0]
            continue
        else:
            shedict[key].append(text[i])
    print(*shedict['понедельник'], sep='\n')    #Выведет расписание на понедельник

    Если захочется чистых глобальных переменных, то используй globals().
    Ответ написан
    Комментировать
  • Почему метод max не выводит максимальное значение?

    Всё просто. Когда ты вызываешь метод readline(), то получаешь массив ['100', '500', '1000\n']. Поэтому max() возвращает '500'. Можно сделать так:
    a = []
    a = fin.readline().split(' ')
    a = list(map(int, a)))
    fg = min(a)
    fgt = max(a)
    print('min =' , fg, ',' , ' max =' , fgt)
    fin.close()
    fout.close()

    Теперть на вход в функцию max() будет поступать список целых чисел и получать корректный результат.
    Ответ написан
    Комментировать