С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38

Простенькая программа, немного сконфужен

20.01.2020, 21:29. Показов 1454. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, написал программу, которая работает неправильно, хотя сама задача очень проста. Самому исправить не получилось, поэтому я просто напишу суть и попрошу вас набросать код
На входе получаем 3 текстовых файла, заполненнных примерно такими строчками
KhKs3s2s,0.244,10701.83
Первое число - карты (их всегда 4, например, Kh - это червовый король). Второе число (0.244 тут) - это вероятность, третье число не важно.
Одна и та же комбинация карт может быть как в одном файле,
(тогда запись будет вроде KhKs3s2s,1.0,10701.83, то есть с вероятностью 100%)
как в двух файлах с вероятностями, дающими 100% в сумме, так и во всех трех файлах.
Задача проста: дать на выходе тоже 3файла, которые будут дополнены записями типа
KhKs3s2s,0.0,10701.83 (то есть с 0% вероятностью)
для тех случаев, когда комбинация карт вообще не упоминается в том или ином файле. Надеюсь, я понятно расписал, подскажите правильный код, пожалуйста. Я специально не даю свой код, так как считаю, что он очень кривой и что проще было спросить именно так. Спасибо за помощь!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2020, 21:29
Ответы с готовыми решениями:

Простенькая программа
Здравствуйте, товарищи программисты! Я совсем не программист, поэтому буду очень благодарен за развернутый ответ из оперы "для...

Простенькая программа!
Помогите пожалуйста написать программу. Заранее большое спасибо! Условие программы: Вступительные испытания в некоторый вуз состоят из...

Простенькая программа C#
Доброго времени суток. Помогите пожалуйста! Нужна простенькая программа на C#, которая бы в себе имела: dll; файлы; классы(массив или...

6
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.01.2020, 08:43
Цитата Сообщение от nesterzhzhot Посмотреть сообщение
проще было спросить именно так
Отнюдь! Выкладывай что получилось.
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
21.01.2020, 11:28
Лучший ответ Сообщение было отмечено nesterzhzhot как решение

Решение

nesterzhzhot,

На коленке:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*- coding: utf-8 -*-
 
# Чтение из файлов
with open("f1.txt", "rt") as f1, open("f2.txt", "rt") as f2:
    f1_lines, f2_lines = f1.read().split("\n"), f2.read().split("\n")
 
# Берем только имена
f1_names = {line.split(",")[0] for line in f1_lines}
f2_names = {line.split(",")[0] for line in f2_lines}
 
# Создаем множество, куда сложим все имена
all_names = set()
 
# Объединяем
all_names.update(f1_names); all_names.update(f2_names)
 
# Множество с названиями всех карт
ALL = set(("B1", "B2", "B3"))
 
# Удаляем пересечения
ALL.difference_update(all_names)
 
# Дописываем в файлы
with open("f1.txt", "at") as f1, open("f2.txt", "at") as f2:
    for name in ALL:
        line = f"{name},0.0,0\n"
        f1.write(line); f2.write(line)
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
21.01.2020, 13:01  [ТС]
iSmokeJC
Хорошо, сейчас выложу, как я написал.

DmFat
Это для двух файлов, а у меня их три

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
def add_zero_frequency_hands_for_3_ranges(fold_range, call_range, raise_range):
    f = open(fold_range)
    c = open(call_range)
    r = open(raise_range)
 
    f_list = []
    c_list = []
    r_list = []
    f_card_list = []
    c_card_list = []
    r_card_list = []
 
    for line in f:
        f_list.append(line)
    for line in c:
        c_list.append(line)
    for line in r:
        r_list.append(line)
    for line in f:
        f_card_list.append(line[0:8])
    for line in c:
        c_card_list.append(line[0:8])
    for line in r:
        r_card_list.append(line[0:8])
 
    for element in f_list:
        if element[9] == '1':
            new_el = element[0:9] + '0' + element[10:]
            c_list.append(new_el)
            r_list.append(new_el)
            c_card_list.append(new_el[0:8])
            r_card_list.append(new_el[0:8])
        elif element[9:13] != '0.0,':
            if element[0:8] not in c_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                c_list.append(new_el)
                c_card_list.append(new_el[0:8])
            elif element[0:8] not in r_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                r_list.append(new_el)
                r_card_list.append(new_el[0:8])
    for element in c_list:
        if element[9] == '1':
            new_el = element[0:9] + '0' + element[10:]
            f_list.append(new_el)
            r_list.append(new_el)
            f_card_list.append(new_el[0:8])
            r_card_list.append(new_el[0:8])
        elif element[9:13] != '0.0,':
            if element[0:8] not in f_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                f_list.append(new_el)
                f_card_list.append(new_el[0:8])
            elif element[0:8] not in r_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                r_list.append(new_el)
                r_card_list.append(new_el[0:8])
    for element in r_list:
        if element[9] == '1':
            new_el = element[0:9] + '0' + element[10:]
            c_list.append(new_el)
            f_list.append(new_el)
            f_card_list.append(new_el[0:8])
            c_card_list.append(new_el[0:8])
        elif element[9:13] != '0.0,':
            if element[0:8] not in c_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                c_list.append(new_el)
                c_card_list.append(new_el[0:8])
            elif element[0:8] not in f_card_list:
                new_el = element[0:9] + '0.0,' + '\n'
                f_list.append(new_el)
                f_card_list.append(new_el[0:8])
    open(fold_range, 'w').close()
    open(call_range, 'w').close()
    open(raise_range, 'w').close()
    for line in f_list:
        open(fold_range, 'a').write(line)
    for line in c_list:
        open(call_range, 'a').write(line)
    for line in r_list:
        open(raise_range, 'a').write(line)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
21.01.2020, 13:01
nesterzhzhot, а что мешает добавить еще 1 файл?
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 38
21.01.2020, 13:28  [ТС]
Да, это хороший аргумент) Единственное, записи с '0.0' нужно добавлять только тогда, когда в файле такой комбинации карт не встречается. Это я уже додумаю. Спасибо за помощь!

Добавлено через 11 минут
Вот эту строчку не понял. Ее надо как-то исправить?

Python
1
2
# Множество с названиями всех карт
ALL = set(("B1", "B2", "B3"))
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
21.01.2020, 13:57
nesterzhzhot, в данной переменной хранятся все возможные комбинации карт.

Тут мы исключаем из всех возможных вариантов, те карты, которые нам встретились во всех файлах.
Python
1
ALL.difference_update(all_names)
А дальше идет цикл который добавляет строки с названиями карт, которые нам не встретились в ходе проверки файлов, и дописывает в конец файла. Название карты, 0.0 и 0.

Добавлено через 2 минуты
Так же дам совет, прочтите как использовать функцию open и инструкция with. Что такое множества.

Добавлено через 21 минуту
nesterzhzhot,

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf-8 -*-
 
#Название файлов
file_names = ["f1.txt", "f2.txt", "f3.txt"]
 
#Создание всех возможных комбинаций карт
all_cards = [f"{i} {suit}"
    for suit in ["hearth", "diamond", "club", "spade"]
    for i in range(2, 15)]
 
# Перебор по файлам
for file_name in file_names:
    # Открытие файла на чтение
    with open(file_name, "rt") as file:
        # Чтение и разбиение по строкам
        lines = file.read().split("\n")
    # Перебор строк
    for line in lines:
        #     На всякий случай проверяем не пуста ли строка, если пуста то
        # переходим к следущей строке.
        if not line: continue
        # Разбиение строки на аргументы, берем только название
        card, _, _ = line.split(",")
        # Проверяем есть ли карта в общей колоде
        if card in all_cards:
            # Если есть, то удаляем
            all_cards.remove(card)
 
# Перебор по файлам
for file_name in file_names:
    # Открытие файла на дозапись
    with open(file_name, "at") as file:
        # Перебор по забытым картам
        for card in all_cards:
            # Запись данных в файл
            file.write(f"{card},0.0,0\n")
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2020, 13:57
Помогаю со студенческими работами здесь

Простенькая программа
Помогите пожалуйста написать программу. Заранее большое спасибо! Условие программы: 2) На вход программы подается содержится текст на...

Простенькая программа на файлы
Сказали,что очень простенькая задача. Я на это искренне надеюсь. Помогите, пожалуйста. "Создайте файл Студент. Занесите в отдельный...

Не работает простенькая программа!
Вывести все "счастливые" четырехзначные числа по семь в строке. сколько таких чисел? Четырехзначное число является...

[Refal+]-простенькая программа
Помогите, пожалуйста Программа получает 3 числа-стороны треугольника. Вывести площадь и периметр треугольника, если он существует. ...

Не линкуется простенькая программа
Программа создает 4 окна и разбивает главное окно на 4 части, также создается 4 потока и они рисуют в этих 4 дочерних окнах... собственно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru