Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15

Автоматизация математических действий

15.11.2022, 07:45. Показов 889. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Есть скрипт с вычитанием. Логика следующая.

1. берет из 1.txt одно число
2. берет из 2.txt другое число
3. производит вычитание и ответ уходит в файл out.txt

Все работает прекрасно. Но каждую итерацию с ответом из out.txt нужно повторять в ручную.
т.е. если я хочу из ответа полученного в файле out.txt вычесть снова то же число из файла 2.txt, то мне нужно вручную скопировать данные из out.txt в 1.txt и вновь произвести вычитание.

Подскажите пожалуйста, как процесс зациклить n-раз?
т.е. например:
1. берет из 1.txt число (5)
2. берет из 2.txt число (1)
3. вычитает его n-раз из ответа (например в скрипте будет указано вычесть 5 раз)

пример:
5-1
4
4-1
3
3-1
2
2-1
1
1-1
0

и в файл out.txt запишет следующие данные:
4
3
2
1
0

p.s. сам скрипт приложу ниже
Python
1
2
with open('1.txt', 'r') as f1, open('2.txt', 'r') as f2, open('out.txt', 'w') as f3:
    f3.write('\n'.join(map(lambda x: f'{int(x[0], 16) - int(x[1], 16)}', zip(f1.read().split(), f2.read().split()))))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2022, 07:45
Ответы с готовыми решениями:

Определить результат математических действий
Дан файл со следующими символами: 3+4+5-2+10-5+10+ 60-30-5-6+100- 5-46+6 Необходимо найти ответ выражения. Я знаю, что можно...

Определите результат математических действий, указанных в файле
Текстовый файл d15-3.txt состоит не более чем из 10**6 цифр и знаков “+”, “-”, “*”. Знак «+» означает сложение, знак «-» вычитание, знак...

Автоматизация действий в браузере (для онлайн-игры)
Здравствуйте. Заранее говорю, я НЕ прошу Вас решать за меня задачу полностью. Хочу просто, чтобы вы меня направили. Хочу попробовать...

18
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
15.11.2022, 08:49
А что мешает сразу вычесть значение из 1 файла * n ?
0
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
15.11.2022, 12:16  [ТС]
iSmokeJC добрый день! Долго объяснять.
Если кратко - обязательное условие, чтобы работа была с 2 файлами. 1.txt и 2.txt
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
15.11.2022, 12:41
Цитата Сообщение от max1388 Посмотреть сообщение
Если кратко
если кратко то записывайте данные из out.txt в 1.txt средствами питона
0
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
15.11.2022, 13:09  [ТС]
Semen-Semenich думаю расписывать цепочку поступающей информации, которую пока не представляется возможным поменять, что явно усложняет задачу - не имеет смысла. Поэтому и написал - "кратко".
"средствами питона"
Именно с этой просьбой и обратился. Потому что моих навыков и знаний явно пока недостаточно. Буду очень признателен за помощь.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
15.11.2022, 13:55
Лучший ответ Сообщение было отмечено max1388 как решение

Решение

Code
1
2
3
4
5
6
7
8
9
открыть файл 2 чтение
повторить n раз:
   открыть файл 1 чтение
   создать список из разностей 
   закрыть файл 1
   открыть файл 1 запись
   записать список
   закрыть файл 1
закрыть файл 2 чтение
0
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
15.11.2022, 15:34  [ТС]
iSmokeJC Спасибо Вам громадное за ответ!
Попытался сделать как Вы написали - не запустилось.
Явно где то допускаю ошибку. Если поправите - буду Вам очень признателен!
В любом случае - большое спасибо еще раз!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
with open('2.txt', 'r') as f2:
     for line in f2:
    string = str(line.strip("\n") - "\n") * 10
            with open('1.txt', 'r') as f1:
             lambda x: f'{int(x[0], 16) - int(x[1], 16)}'
                 saveList.append(string)
            f1.close()
                with open('1.txt', 'w') as f1:
                     saveList = list(map(str, saveList))
                     f1.writelines(saveList)
                f1.close()
f2.writelines(saveList)
f2.close()
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
15.11.2022, 15:44
Лучший ответ Сообщение было отмечено max1388 как решение

Решение

Цитата Сообщение от max1388 Посмотреть сообщение
не запустилось
Разумеется. Метод научного тыка как правило не работает
Python
1
2
3
4
5
6
7
8
n = 5
with open('2.txt', 'r') as f2:
    nums2 = list(map(lambda x: int(x, 16), f2.read().split()))
for _ in range(n):
    with open('1.txt', 'r') as f1:
        nums1 = list(map(lambda x: int(x, 16), f1.read().split()))
    with open('1.txt', 'w') as f1:
        f1.write('\n'.join(map(lambda x: f'{int(x[0], 16) - int(x[1], 16)}', zip(nums1, nums2))))
0
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
15.11.2022, 16:06  [ТС]
iSmokeJC боюсь в моем случае, даже когда идет помощь не всегда работает. Тяжеловато в возрасте дается новая наука.
Не закидывайте камнями, пожалуйста.
После запуска скрипта файл 1.txt мне все время пустой выдает.
Можете, пожалуйста, у себя разок посмотреть?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
15.11.2022, 16:49
Лучший ответ Сообщение было отмечено max1388 как решение

Решение

Python
1
2
3
4
5
6
7
8
n = 5
with open('2.txt', 'r') as f2:
    nums2 = list(map(lambda x: int(x, 16), f2.read().split()))
for _ in range(n):
    with open('1.txt', 'r') as f1:
        nums1 = list(map(lambda x: int(x, 16), f1.read().split()))
    with open('1.txt', 'w') as f1:
        f1.write('\n'.join(map(lambda x: f'{hex(x[0] - x[1])[2:]}', zip(nums1, nums2))))
1
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
15.11.2022, 17:46  [ТС]
iSmokeJC Спасибо громаднейшее!!! все работает!!
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
15.11.2022, 17:49
update
Python
1
f1.write('\n'.join(map(lambda x, y: f'{hex(x - y)[2:]}', nums1, nums2)))
1
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
16.11.2022, 16:15  [ТС]
iSmokeJC скажите пожалуйста, вы можете добавить в данный скрипт ограничение?
вычитание останавливается при достижения значения равного/или меньше x?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.11.2022, 16:32
Значения чего?
0
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
16.11.2022, 17:12  [ТС]
например я из ffffffffff (1.txt) вычитаю ff (2.txt) n-раз.

чтобы при достижения значения ffffffff0 или меньше, вычитание ff останавливалось.

в идеале конечно и счетчик вычитаний. но я не знаю, возможно ли ограничение подобное в принципе поставить в рамках подобной задачи.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.11.2022, 17:15
Очень туманно. Вот допустим в первом файле 100 разных значений. Какое из них отслеживать?

Не по теме:

Цитата Сообщение от max1388 Посмотреть сообщение
вы можете добавить
Могу, но не буду. Мне лень

1
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
16.11.2022, 17:34  [ТС]
Оу. Я исходил из соображений что в 1.txt только одно значение. т.е.
скрипт начинает работу:
ffffffffff (1.txt) -ff (2.txt) (это должно произойти n-раз)
ffffffff00 -ff
fffffffe01 -ff
fffffffd02 -ff
...
ограничение стоит : ffffffff0;
и когда вычитание добирается до этого значения, и должно произойти следующее вычитание:
ffffffff0 - ff (или значение(ffffffff0) на момент выполнения нового вычитания уже ниже, после предыдущего вычитания)
скрипт прекращает работу
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.11.2022, 18:03
Цитата Сообщение от max1388 Посмотреть сообщение
Я исходил из соображений что в 1.txt только одно значение
Тогда тут половину кода можно выкинуть

Добавлено через 5 минут
Python
1
2
3
4
5
6
7
8
9
10
11
n = 5
with open('2.txt', 'r') as f2:
    nums2 = int(f2.read(), 16)
for _ in range(n):
    with open('1.txt', 'r') as f1:
        nums1 = int(f1.read().strip(), 16)
        res = nums1 - nums2
        if res <= int('ffffffff0', 16):
            break
    with open('1.txt', 'w') as f1:
        f1.write(hex(res)[2:])
1
1 / 1 / 0
Регистрация: 14.11.2022
Сообщений: 15
16.11.2022, 18:07  [ТС]
а если как Вы написали ранее?
допустим там 100 значений, и при достижении определенного значения любым из них - скрипт завершает работу?

upd
Спасибо Вам громадное! Не увидел правки!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2022, 18:07
Помогаю со студенческими работами здесь

Автоматизация действий
Работаю на help'е, прилетает на почту письма по скрипту с erp, они стандартного шаблона, пользователь и др. инфа, нужно посмотреть, если ли...

Автоматизация действий на сайте
Есть браузерная игрушка. Решил немного автоматизировать для себя кое-какие процессы ) Вопрос в следующем. Пишу скрипт на python с...

Автоматизация действий на сайтах
Здравствуйте, меня интересует написание программ для автоматизации в интернете Например регистраторы аккаунтов либо грабберы какой либо...

Странный результат математических действий
Странные вещи творятся в этой винде - внизу привёл кусок кода для примера (не элемент программы, ибо она немалая и содержит несколько...

Совершение математических действий с элементами DataGridView
Добрый день! Имеется локальная БД Access, в которой содержится две связанных таблицы – Наименование услуги и действия по услуге. Обе...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru