Ответы пользователя по тегу Python
  • Задача из stepik. Как исправить проблему с занесением в список?

    @gorodnev
    Самая основная проблема Вашего кода - это неправильное сравнение типов.
    Вот в этой строчке вы получаете название команды и ее очки, но все эти переменные имеют тип string.
    team1, r1, team2, r2= input().split(';')

    И сравниваются они соответственно в лексикографическом порядке. Например,
    попробуйте сравнить 119 и 12 как числа, и как строки ('119' и '12'). Результаты могут удивить :)
    Мое решение:
    spoiler
    import collections
    
    results = collections.defaultdict(list)
    n = int(input())
    for _ in range(n):
      team1, score1, team2, score2 = input().strip().split(';')
      score1 = int(score1)
      score2 = int(score2)
      if score1 == score2:
        results[team1].append(1)
        results[team2].append(1)
        continue
    
      if score1 > score2:
        results[team1].append(3)
        results[team2].append(0)
      else:
        results[team2].append(3)
        results[team1].append(0)
    
    for team, scores in results.items():
      games = str(len(scores))
      wins = str(scores.count(3))
      draws = str(scores.count(1))
      loses = str(scores.count(0))
      total = str(sum(scores))
      print('%s:%s' % (team, ' '.join((games, wins, draws, loses, total))))
    Ответ написан
    1 комментарий
  • Работа с файлами в Python. При чтении файла вылезает ошибка. В чем причина?

    @gorodnev
    Меня несколько смущает, что Вы открываете флаг на запись 'w', а потом на нем же пытаетесь что-то прочитать. Тут выходов два - или переоткрывайте файл на чтение-запись, либо откажитесь от одной из операций.

    PS: немного подумав, мне пришла в голову идея, что Вы перепечатываете какой-то листинг. И там режим не 'tw', а 'rw' (t и r - соседние буквы в раскладке). А 'rw' - это как раз режим "чтение-запись".
    Ответ написан
    Комментировать
  • IndexError: string index out of range - в чем причина?

    @gorodnev
    Мой вариант такой, в принципе вместо дека можно использовать и обычный list:

    import collections
    genome = 'aaaabbcaa'
    result = collections.deque()
    genome += '$'
    last = genome[0]
    counter = 1
    for c in genome[1:]:
      if c == last:
        counter += 1
      else:
        result.append('%s%d' % (last, counter))
        last = c
        counter = 1
    print(''.join(result))
    Ответ написан
    Комментировать
  • Как обратиться к функции по ключевому слову строки?

    @gorodnev
    Если я правильно понял вопрос, то Вам следует создать словарь с функциями-обработчиками, которые будут вызываться по ключевому слову. Что-то вроде такого:

    % cat ans.py
    handlers = {
      'ADD': lambda x: print('ADD with %s' % x),
      'DELETE': lambda x: print('DELETE with %s' % x),
      'INSERT': lambda x: print('INSERT with %s' % x)
      }
    for _ in range(int(input())):
      handler_name, arg = input().split()
      handler = handlers.get(
            handler_name, lambda _: print("%s wasn't found" % handler_name)
            )
      handler(arg)


    % cat input.txt 
    4
    DELETE 10
    INSERT 2
    ADD 15
    SELECT 7


    В результате запуска:

    % python3 ans.py < input.txt             
    DELETE with 10
    INSERT with 2
    ADD with 15
    SELECT wasn't found
    Ответ написан
    1 комментарий