@Fendero

По какой причине программа неверено сравнивает правильные данные?

Сама задача подробно описана здесь - https://www.codewars.com/kata/5a420163b6cfd7cde500...
Если кратко, то нужно получать данные о матчхах определенной команды:
1. Все победы;
2. Все поражения;
3. Ничьи;
4. Все набранные очки;
5. Все проигранные очки;
(это не все, но главное в моей проблеме)
Неточности возникают с 1 и 2 пунктом, а именно он неверно сравнивает результаты 4 и 5 пунктов ОДНОГО матча(при том у всех остальный верно), соответственно зачисляет победу или поражение неправильно.

Вот код, в нем есть пример - (print(nba_cup(r, "Boston Celtics"))),
результат которого равен - "Boston Celtics:W=3;D=0;L=1;Scored=403;Conceded=350;Points=9",
а должно быть - "Boston Celtics:W=4;D=0;L=0;Scored=403;Conceded=350;Points=12":
import re

def nba_cup(result_sheet, to_find):
    result_sheet = result_sheet.split(',')
    score = 0
    conceded = 0
    wins = 0
    loses = 0
    draws = 0
    mark = 0
    for i in result_sheet:
        if to_find in i:
            j = re.findall('\d+', i)
            res = i.split(j[0])

            res[0] += j[0]
            print(res)

            for k in res:
                if to_find in k:
                    print(k)
                    nums_of_item_w = re.findall('\d+', k)
                    if len(nums_of_item_w) > 1:
                        nums_of_item_w = nums_of_item_w[-1]
                    else:
                        nums_of_item_w = nums_of_item_w[0]
                    print(nums_of_item_w)
                    score += int(nums_of_item_w)

                else:
                    nums_of_item_l = re.findall('\d+', k)
                    if len(nums_of_item_l) > 1:
                        nums_of_item_l = nums_of_item_l[-1]
                    else:
                        nums_of_item_l = nums_of_item_l[0]
                    print(nums_of_item_l)
                    conceded += int(nums_of_item_l)
            if nums_of_item_w > nums_of_item_l:
                wins += 1
                mark += 3
            elif nums_of_item_w < nums_of_item_l:
                loses += 1
                mark += 0
            else:
                draws += 1
                mark += 1
            print('W:', wins,'L:', loses, 'D', draws)
            print('/'*261)

    about_team = '{0}:W={1};D={2};L={3};Scored={4};Conceded={5};Points={6}'.format(to_find,wins,draws,loses,score,conceded,mark)
    return about_team


r = (
    "Los Angeles Clippers 104 Dallas Mavericks 88,New York Knicks 101 Atlanta Hawks 112,Indiana Pacers 103 Memphis Grizzlies 112,"
    "Los Angeles Lakers 111 Minnesota Timberwolves 112,Phoenix Suns 95 Dallas Mavericks 111,Portland Trail Blazers 112 New Orleans Pelicans 94,"
    "Sacramento Kings 104 Los Angeles Clippers 111,Houston Rockets 85 Denver Nuggets 105,Memphis Grizzlies 76 Cleveland Cavaliers 106,"
    "Milwaukee Bucks 97 New York Knicks 122,Oklahoma City Thunder 112 San Antonio Spurs 106,Boston Celtics 112 Philadelphia 76ers 95,"
    "Brooklyn Nets 100 Chicago Bulls 115,Detroit Pistons 92 Utah Jazz 87,Miami Heat 104 Charlotte Hornets 94,"
    "Toronto Raptors 106 Indiana Pacers 99,Orlando Magic 87 Washington Wizards 88,Golden State Warriors 111 New Orleans Pelicans 95,"
    "Atlanta Hawks 94 Detroit Pistons 106,Chicago Bulls 97 Cleveland Cavaliers 95,"
    "San Antonio Spurs 111 Houston Rockets 86,Chicago Bulls 103 Dallas Mavericks 102,Minnesota Timberwolves 112 Milwaukee Bucks 108,"
    "New Orleans Pelicans 93 Miami Heat 90,Boston Celtics 81 Philadelphia 76ers 65,Detroit Pistons 115 Atlanta Hawks 87,"
    "Toronto Raptors 92 Washington Wizards 82,Orlando Magic 86 Memphis Grizzlies 76,Los Angeles Clippers 115 Portland Trail Blazers 109,"
    "Los Angeles Lakers 97 Golden State Warriors 136,Utah Jazz 98 Denver Nuggets 78,Boston Celtics 99 New York Knicks 85,"
    "Indiana Pacers 98 Charlotte Hornets 86,Dallas Mavericks 87 Phoenix Suns 99,Atlanta Hawks 81 Memphis Grizzlies 82,"
    "Miami Heat 110 Washington Wizards 105,Detroit Pistons 94 Charlotte Hornets 99,Orlando Magic 110 New Orleans Pelicans 107,"
    "Los Angeles Clippers 130 Golden State Warriors 95,Utah Jazz 102 Oklahoma City Thunder 113,San Antonio Spurs 84 Phoenix Suns 104,"
    "Chicago Bulls 103 Indiana Pacers 94,Milwaukee Bucks 106 Minnesota Timberwolves 88,Los Angeles Lakers 104 Portland Trail Blazers 102,"
    "Houston Rockets 120 New Orleans Pelicans 100,Boston Celtics 111 Brooklyn Nets 105,Charlotte Hornets 94 Chicago Bulls 86,"
    "Cleveland Cavaliers 103 Dallas Mavericks 97")

teams = ("Los Angeles Clippers,Dallas Mavericks,New York Knicks,NYK,Atlanta Hawks,Indiana Pacers,Memphis Grizzlies,"
         "Los Angeles Lakers,Minnesota Timberwolves,Phoenix Suns,Portland Trail Blazers,New Orleans Pelicans,"
         "Sacramento Kings,Los Angeles Clippers,Houston Rockets,Denver Nuggets,Cleveland Cavaliers,Milwaukee Bucks,"
         "Oklahoma City Thunder, San Antonio Spurs,Boston Celtics,Philadelphia 76ers,Brooklyn Nets,Chicago Bulls,"
         "Detroit Pistons,Utah Jazz,Miami Heat,Charlotte Hornets,Toronto Raptors,Orlando Magic,Washington Wizards,"
         "Golden State Warriors,Dallas Maver")
print(nba_cup(r, "Boston Celtics"))
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
слишком сложный алгоритм
\d+ ищет любые последовательности цифр, в том числе возвращает имя команды если в ней есть цифра
чтобы искать именно отдельно стоящие цифры, в том числе в конце или начале строки:
\b\d+\b

Код при запуске выдаёт ошибку
if nums_of_item_w > nums_of_item_l:
UnboundLocalError: local variable 'nums_of_item_l' referenced before assignment
после добавления в начало
nums_of_item_w = ''
nums_of_item_l = ''

программа заработала,
Boston Celtics:W=4;D=0;L=0;Scored=403;Conceded=350;Points=12
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы