Самый частый исход матча

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
В общем в двух словах хочу потренироваться в статистике и программировании, за основу взял футбол, немогу понять как найти самый частый исход матча в моём коде через два списка, беру 100 личных встреч, в список а записываю кол-во голов первой команды, в список b записываю кол-во голов второй, пример кода:
a = []
b = []
srednee = 0
sred1 = 0
sred2 = 0
draw = 0
win1 = 0
win2 = 0
for i in range(100):
a.append(input())
b.append(input())
srednee += int(a)+int(b)
sred1 += int(a)
sred2 += int(b)
if a==b:
draw += 1
elif int(a)>int(b):
win1 += 1
else:
win2 += 1
print("среднее количество забитых мячей в матче = ", srednee/100)
print("среднее количество забитых голов первой команды = ", sred1/100)
print("среднее количество забитых голов второй команды = ", sred2/100)
print("процент ничьих = ", draw)
print("процент побед 1 команды = ", win1)
print("процент побед 2 команды = ", win2)
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
Не понял в чем проблема или не понял как это сделать ?
Не понял принцип
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
Я учел это думая что это одинаковый исход , там пару строк нужно стереть

Python:
from collections import Counter

a = []
b = []
c = []
srednee = 0
sred1 = 0
sred2 = 0
draw = 0
win1 = 0
win2 = 0

for i in range(5):
    a.append(int(input()))
    b.append(int(input()))
    c.append((a[i], b[i]))
    srednee += a[len(a) - 1] + b[len(b) - 1]
    sred1 += a[len(a) - 1]
    sred2 += b[len(b) - 1]

for i in range(5):
    if a[i - 1] == b[i - 1]:
        draw += 1
    elif a[i - 1] > b[i - 1]:
        win1 += 1
    else:
        win2 += 1
print("среднее количество забитых мячей в матче = ", srednee / 5)
print("среднее количество забитых голов первой команды = ", sred1 / 5)
print("среднее количество забитых голов второй команды = ", sred2 / 5)
print("процент ничьих = ", draw)
print("процент побед 1 команды = ", win1)
print("процент побед 2 команды = ", win2)

frequent_outcome = Counter(c).most_common(1)
x, y = frequent_outcome[0][0]
print('самый частый исход = ', '(', x, ':', y, ',', frequent_outcome[0][1], ' раз(а)', ')', sep='')

заметил что на строках

Python:
frequent_outcome = Counter(c).most_common(1)
x, y = frequent_outcome[0][0]
я не просчитал если будет несколько команд с найбольшим счетом, попробуй сам доделать
подсказка:
Counter(c).most_common() словарь который хранит ключ значение, первый[ ]отвечает от 0 счета до последнего а второй от 0 до 1 0 это счет 1 это количество таких игр
Не найбольший счёт нужен, а самый частый исход, то есть 1-2 и 2-1 это разные исходы
 

Ayras

Новичок
Пользователь
Июн 26, 2021
23
2
3
Не найбольший счёт нужен, а самый частый исход, то есть 1-2 и 2-1 это разные исходы
Да я об этом , перепутал слова
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
Да я об этом , перепутал слова
В общем я понял по моему, через словарь не получится) придётся лопатить через строки
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
Да я об этом , перепутал слова
по моему тут ошибка)
for i in range(5):
if (a, b) in c:
c.append((a, b))
else:
c.append((b, a))
я не понял зачем вообще тут if else без него работает вроде, и не понял почему когда в списке есть (2, 1) я добавляю (1,2) он заходит в else?
 

notVasya

Новичок
Пользователь
Июл 9, 2021
3
0
1
Извиняюсь что встреваю в вашу беседу ,но
За чем всё так усложнять ? Если речь идёт о том что бы найти самое частое значение(результат матча). То совершенно ни к чему брать цифры от обеих команд по отдельности , а за тем их сравнивать . Ведь в любой статистике уже имеются значения типа "2:1" или "3:2" . В таком формате их и нужно сравнивать . Сначала загнать в список . Потом создать второй список со всеми возможными вариантами счета . А потом просто прогнать в цикле ища количество вхождений значения из второго списка в списке с результатами матча

Python:
import re

results = ['2:1',  '3:2', '1:3', '2:1', '3:2', '2:1', '1:2'] # Список результатов матчей
digets = ['0:0',  '1:0', '2:0', '1:1','2:1','2:2', '3:3', '0:1', '1:2'] # и тд , список всех интересуемых возможных результатов
modifity = '  '.join(results)
for i in digets:
    strings = re.findall(i, modifity)
    print(str(i) + ' Найдено '+''.join(strings[:1]) + ' - всего:' + str(len(strings)))

например так
Код получится куда короче и проще
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
Извиняюсь что встреваю в вашу беседу ,но
За чем всё так усложнять ? Если речь идёт о том что бы найти самое частое значение(результат матча). То совершенно ни к чему брать цифры от обеих команд по отдельности , а за тем их сравнивать . Ведь в любой статистике уже имеются значения типа "2:1" или "3:2" . В таком формате их и нужно сравнивать . Сначала загнать в список . Потом создать второй список со всеми возможными вариантами счета . А потом просто прогнать в цикле ища количество вхождений значения из второго списка в списке с результатами матча

Python:
import re

results = ['2:1',  '3:2', '1:3', '2:1', '3:2', '2:1', '1:2'] # Список результатов матчей
digets = ['0:0',  '1:0', '2:0', '1:1','2:1','2:2', '3:3', '0:1', '1:2'] # и тд , список всех интересуемых возможных результатов
modifity = '  '.join(results)
for i in digets:
    strings = re.findall(i, modifity)
    print(str(i) + ' Найдено '+''.join(strings[:1]) + ' - всего:' + str(len(strings)))

например так
Код получится куда короче и проще
в принципе в данном случае можно и так, не додумался до этого) но если количество данных будет 1000, 10000 или 1 000 000 то ваш алгоритм будет очень медленным, а мы тут пытаемся грокать алгоритмы)
 

qzpxg

Новичок
Пользователь
Мар 25, 2021
24
0
1
кстати вот для чего я это всё замутил, может интересно будет)
 

Ayras

Новичок
Пользователь
Июн 26, 2021
23
2
3
по моему тут ошибка)
for i in range(5):
if (a, b) in c:
c.append((a, b))
else:
c.append((b, a))
я не понял зачем вообще тут if else без него работает вроде, и не понял почему когда в списке есть (2, 1) я добавляю (1,2) он заходит в else?
я так написал, потому что думал что исход игры не имеет значения 1:2 или 2:1
по этому сделал что бы это были два одинаковых значения
 

Ayras

Новичок
Пользователь
Июн 26, 2021
23
2
3
кстати вот для чего я это всё замутил, может интересно будет)
неплохо, вы столько потратили времени на ввод)
 

Ayras

Новичок
Пользователь
Июн 26, 2021
23
2
3
В общем я понял по моему, через словарь не получится) придётся лопатить через строки
та вроде все получается, если есть вопрос мы можем созвонится может на словах легче поймете
 

Ayras

Новичок
Пользователь
Июн 26, 2021
23
2
3
Извиняюсь что встреваю в вашу беседу ,но
За чем всё так усложнять ? Если речь идёт о том что бы найти самое частое значение(результат матча). То совершенно ни к чему брать цифры от обеих команд по отдельности , а за тем их сравнивать . Ведь в любой статистике уже имеются значения типа "2:1" или "3:2" . В таком формате их и нужно сравнивать . Сначала загнать в список . Потом создать второй список со всеми возможными вариантами счета . А потом просто прогнать в цикле ища количество вхождений значения из второго списка в списке с результатами матча

Python:
import re

results = ['2:1',  '3:2', '1:3', '2:1', '3:2', '2:1', '1:2'] # Список результатов матчей
digets = ['0:0',  '1:0', '2:0', '1:1','2:1','2:2', '3:3', '0:1', '1:2'] # и тд , список всех интересуемых возможных результатов
modifity = '  '.join(results)
for i in digets:
    strings = re.findall(i, modifity)
    print(str(i) + ' Найдено '+''.join(strings[:1]) + ' - всего:' + str(len(strings)))

например так
Код получится куда короче и проще
да как возможный вариант, для таких значений нормлаьно, но если есть оптмизированый Counter то чего бы не использовать его функционал
а по отдельности цифры взяты потому что, я думал в условии такая загвоздка , я бы тоже делал ввод 1625870449121.png примерно вот такой
а еще лучше через файл
 

Форум IT Специалистов