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

Перебор списка с дальнейшей работой с данными в нем

02.06.2023, 21:30. Показов 1002. Ответов 8

Студворк — интернет-сервис помощи студентам
И снова здравствуйте! Суть проблемы такая. Есть список с данными в формате .txt. Пример данных в списке: *название* = *числовые значения через запятую*. Конкретный пример: Кофе = 8, 7, 7.2, 2. И так далее. В этот список я могу вносить доп. значения, но при попытке поиска ничего не выходит. Сам код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my_data = open("data.txt", "r+", encoding="utf-8") # открытие файла
my_data.write("\nУспешно добавлено") # проверка открытия файла путём добавления строки(успешно добавляется в конец .txt файла)
my_data.read()
user = input("Введите название продукта:")
for user in my_data:
    if user == my_data:
        user_date = int(input("Введите количество потребляемого продукта (в граммах):"))
        col = user_date * int(user[0]) / 100
        bel = user_date * int(user[1]) / 100
        jir = user_date * int(user[2]) / 100
        ugl = user_date * int(user[3]) / 100
        print("Калории:", col, "грамм\n", "Белки:", bel, "грамм\n", "Жиры:", jir, "грамм\n", "Углеводы:", ugl,
        "грамм")
    else:
        user = input(("Совпадений не найдено! Повторите попытку: "))
        continue
my_data.close()
Сами расчеты можете не смотреть, т.к. изначально список был в .py и расчеты делались под этот формат.

UPD. Если кому интересно, пытаюсь написать программу для расчета кБЖУ, для себя.
Заранее спасибо за помощь)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2023, 21:30
Ответы с готовыми решениями:

Формирование отчета с дальнейшей работой формы
Просьба помочь в написании кода для форм с отчетностью. При формировании отчета в конце написана команда DoCmd.Close чтобы закрыть...

Перебор списка заново при достижении последнего элемента списка
Здравствуйте, У меня вот такая задача. Есть расписание автобусов, указанное в виде списка. (время указано без разделителя...

Перебор списка
При переборе списка компилятор ругается на строчку "printf("%i", index->geti());" MyClass::geti' : cannot convert 'this' pointer from...

8
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
02.06.2023, 22:08
Лучший ответ Сообщение было отмечено easybudda как решение

Решение

Цитата Сообщение от xsupport Посмотреть сообщение
user = input("Введите название продукта:")
for user in my_data:
    if user == my_data:


Добавлено через 28 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
with open('in.txt', 'r', encoding='utf-8') as f:
    content = f.readlines()
 
items = dict()
for line in content:
    key, value = line.split(' = ')
    items[key] = list(map(float, value.split(',')))
 
print(items)
while True:
    product = input("Введите название продукта: ")
    if product == '':
        break
    if product in items:
        mass = int(input("Введите количество потребляемого продукта (в граммах): "))
        vals = tuple((mass * items[product][i]) / 100 for i in range(4))
        print("Калории: %.2f грамм\nБелки: %.2f грамм\nЖиры: %.2f грамм\nУглеводы: %.2f грамм" % vals)
    else:
        print("Продукт не найден")
    continue
3
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
02.06.2023, 22:19
Лучший ответ Сообщение было отмечено xsupport как решение

Решение

Цитата Сообщение от xsupport Посмотреть сообщение
Python
1
my_data.write("\nУспешно добавлено") # проверка открытия файла путём добавления строки

Цитата Сообщение от xsupport Посмотреть сообщение
(успешно добавляется в конец .txt файла)

Режимы 'r+' и 'r+b' открывают файл и устанавливают курсор на начало файла, запись в файл начинается с места остановки курсора при его чтении перед записью. Если файл перед записью не читался то запись осуществляется в начало файла.
И вообще, если файл по каким-то причинам не откроется, сгенерится исключение, подобные проверки более чем излишни.

Цитата Сообщение от xsupport Посмотреть сообщение
Python
1
2
my_data.read()
for user in my_data:

Так-то my_data это файловый объект, он в себе содержимое файла не хранит, даже после чтения, результат read нужно где-то сохранять.
Цитата Сообщение от xsupport Посмотреть сообщение
user = input("Введите название продукта:")
for user in my_data:
Мусье знает толк в извращениях
Цитата Сообщение от xsupport Посмотреть сообщение
Python
1
2
3
4
        col = user_date * int(user[0]) / 100
        bel = user_date * int(user[1]) / 100
        jir = user_date * int(user[2]) / 100
        ugl = user_date * int(user[3]) / 100
Таки Вы действительно думает, что питон сам разберет, где у Вас в строке название продукта, где данные?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my_data = open("1.txt", "r", encoding="utf-8") # открытие файла
result = "Совпадений не найдено!"
buf = my_data.readlines()
my_data.close()
product = input("Введите название продукта:")
for row in buf:
    prod, data = row.split('=')
    data = list(map(float, data.split(',')))
    if prod == product:
        user_date = int(input("Введите количество потребляемого продукта (в граммах):"))
        col = user_date * data[0] / 100
        bel = user_date * data[1] / 100
        jir = user_date * data[2] / 100
        ugl = user_date * data[3] / 100
        result = f"Калории:{col} грамм\nБелки:{bel} грамм\nЖиры:{jir} грамм\nУглеводы:{ugl} грамм"
        break
print(result)
Вариант не идеален, расчет всегда на то, что строки в файле в формате <string>=<num1>,<num2>,<num3>,<num4> строка, равно, четыре числа через запятую, все без пробелов.
2
0 / 0 / 0
Регистрация: 03.05.2023
Сообщений: 6
03.06.2023, 20:24  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
prod, data = row.split('=')
В данной строке выявляется ошибка: "ValueError: not enough values to unpack (expected 2, got 1)"
Я так понял второе значение он должен подхватывать из файла.txt, но он этого не делает. Либо я не правильно понимаю.
За плохой код и ошибки логики, строго не судите изучил самые основы и те забыл, т.к. очень много работаю. За ответы всем спасибо)

Добавлено через 10 минут
Возможно дело в самом файле.txt?
Кликните здесь для просмотра всего текста
https://disk.yandex.ru/d/UxzZAoyD6m_5wg

Выглядит он так
0
32 / 24 / 11
Регистрация: 03.06.2023
Сообщений: 56
03.06.2023, 20:54
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
def search():
    
    with open('data.txt', 'r', encoding='utf-8') as f:
        data = f.read().lower()
    
    product = input('Введите название продукта: ')
    
    if product in data:
        for line in data.split('\n'):
            if line:
                key = line.split(' = ')[0].lower()
                if key == product:
                    values = list(map(float, line.split(' = ')[1].split(', ')))
                    quantity = int(input("Введите количество потребляемого продукта (в граммах): "))
                    calories = quantity * int(values[0]) / 100
                    squirrels = quantity * int(values[1]) / 100
                    fats = quantity * int(values[2]) / 100
                    carbohydrates = quantity * int(values[3]) / 100
                    print(f'Калории: {calories} грамм\n'
                          f'Белки: {squirrels} грамм\n'
                          f'Жиры: {fats} грамм\n'
                          f'Углеводы: {carbohydrates} грамм')   
    else:
        print('Совпадений не найдено')
        search()
 
 
search()
1
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
03.06.2023, 21:00
Цитата Сообщение от xsupport Посмотреть сообщение
В данной строке выявляется ошибка: "ValueError: not enough values to unpack (expected 2, got 1)"
Цитата Сообщение от kazak Посмотреть сообщение
Вариант не идеален, расчет всегда на то, что строки в файле в формате <string>=<num1>,<num2>,<num3>,<num4> строка, равно, четыре числа через запятую, все без пробелов.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.06.2023, 11:52
Тут прям напрашивается использование sqlite. Ну либо хотя бы формата файла csv;
1
0 / 0 / 0
Регистрация: 03.05.2023
Сообщений: 6
04.06.2023, 19:16  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Тут прям напрашивается использование sqlite. Ну либо хотя бы формата файла csv;
, спасибо за совет, как нибудь попробую)

Добавлено через 6 минут
kazak, Ну собственно, попробовал убрать все пробелы и... Все заработало!!
Огромное спасибо всем, кто помог или пытался помочь, а так же подробный анализ моего "кода")
Кому интересно в файле.txt данные выглядят следующим образом: <наименование продукта(тут можно использовать пробелы)>=<num1>,<num2>,<num3>,<num4>
Конкретный пример: Апельсиновый сок=45,0.7,0.2,10.7
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.06.2023, 15:23
sqlite можно заполнять руками, так что всё намного проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2023, 15:23
Помогаю со студенческими работами здесь

Перебор списка
Нужно перебрать список объектов класса , для присвоения к временному классу. void Output(list&lt;Book&gt;list_books) { int...

Перебор списка
Всем привет. Задача: Перебрать все элементы списка(линейный однонаправленный), так что бы поучаствовали все элементы, но не было повторов...

Перебор списка списков
Помогите перебрать список списков. Вот так я его формирую static private List&lt;List&lt;int&gt;&gt; Pars(string name) { ...

Перебор списка по индексу
Доброго времени суток. Перебор списка в Python по индексу можно делать иначе чем: for i in range(len(list_int)): ? Есть ли что-то...

Перебор элементов списка
Что не так? Почему список списков не могу вывести? using System; using System.Collections.Generic; using System.Linq; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru