Я делаю программу подсчета калорий на python, и программа создает два текстовых файла, один для потребляемых калорий пищи и один для сожженных калорий упражнений, мне нужно вычесть сожженные калории из пищевых калорий, но информация для обоих: в отдельных текстовых файлах как мне создать еще один текстовый файл и добавить в него данные из этих двух файлов?
Я пытался использовать файлы в функциях, которые возвращают свои данные, затем добавлял функции добавления, чтобы израсходованные калории можно было вычесть из потребляемых калорий, но кажется, что функции нельзя добавлять или объединять.
Excercise.txt
создается выше в каком-то другом блоке кода, и ввод часов тренировки также был опущен, чтобы сохранить здесь простоту. Этот блок читает, добавляет и отображает код в оболочке для упражнений.
def liftnumber():
total=0
products=[]
file = open("excercises.txt", "r")
for line in file: #put data from file int6o propdytc list
products.append(line)
file.close()
for item in products: # show products
currentline = item.split(",") #split data where tyhe is a comma
total=total+int(currentline[0])
print("Total calories expended:",total*100)
Этот блок кода суммирует все калории пищи вместе в inventory.txt
, и этот блок кода также следует вдоль строк последнего, где файл инвентаризации и ввод пищи создается где-то еще. Единственное отличие состоит в том, что у этого есть 2 фрагмента данных, разделенных запятыми; калории и название еды, тогда как у последнего есть один фрагмент: часы упражнений
def finishday():
total=0
print("HERE'S HOW YOU DID TODAY")
print("-----------------")
products=[] ##create a list that holds all foods from inventory.txt
file = open("inventory.txt", "r")
for line in file: #put data from file int6o propdytc list
products.append(line)
file.close()
for item in products: # show products
currentline = item.split(",") #split data where tyhe is a comma
total=total+int(currentline[1])
print("Total calories consumed:",total)
liftnumber()
Если вы не можете повторить проблему с кодом выше, попробуйте всю программу ниже:
Функция, позволяющая пользователю сделать выбор из основного цикла:
def mainmenu():
print("------------------------")
print("ETCHAPP")
print("------------------------")
print("1> enter a new food")
print("2> see foods")
print("3> delete something")
print("4> enter excercises")
print("5> finish day")
print("6> see excercises")
print("x> exit program")
choice = input("Enter your choice: ")
choice=choice.strip()
return(choice)
def enterproduct():
print("ENTER A NEW FOOD")
print("------------------------")
number=input("enter food: ")
price=input("enter calories in food consumed: ")
# should remove any leading or trailing spaces
number = number.strip()
price = price.strip()
# write data to the file as one line (comma delimited)
line =number+","+price+"\n" #put all the data together
with open("inventory.txt","a") as file:
file.write(line) #write product data
file.close()
def seeproducts():
print("REPORT OF PRODUCTS")
print("-----------------")
products=[] #create a list that holds all foods from inventory.txt
file = open("inventory.txt", "r")
for line in file: #put data from file into propdytc list
products.append(line)
file.close()
for item in products: # show prioducts
print(item)
currentline = item.split(",") #split data where there is a comma
prodnumber = currentline[0]
price = currentline[1]
# This one allows user to enter excercise times
def enterlift():
print("ENTER A NEW EXCERCISE")
print("------------------------")
print("(must be 30 bpm over normal heart rate)")
num=input("enter number of hours excercised: ")
# should remove any leading or trailing spaces
num = num.strip()
# write data to the file as one line (comma delimited)
line =num+"\n" #put all the data together
with open("excercises.txt","a") as file:
file.write(line) #write product data
file.close()
# This one adds all the excercise times together
def liftnumber():
total=0
products=[] #create a list that holds all foods from inventory.txt
file = open("excercises.txt", "r")
for line in file: #put data from file int6o propdytc list
products.append(line)
file.close()
for item in products: # show products
currentline = item.split(",") #split data where tyhe is a comma
total=total+int(currentline[0])
print("Total calories expended:",total*100)
# This one allows user to see excercise times entered
def seelift():
print("HERE'S HOW YOU'RE DOING")
print("-----------------")
total=0
products=[] #create a list that holds all foods from inventory.txt
file = open("excercises.txt", "r")
for line in file: #put data from file int6o propdytc list
products.append(line)
file.close()
for item in products: # show products
currentline = item.split(",") #split data where tyhe is a comma
total=total+int(currentline[0])
print("Total hours excercised:",total)
print("Total calories expended:",total*100)
# This finishes a day and begins the next one
def finishday():
total=0
print("HERE'S HOW YOU DID TODAY")
print("-----------------")
products=[] #create a list of which weill hold all products from the
file inventory.txt
file = open("inventory.txt", "r")
for line in file: #put data from file int6o propdytc list
products.append(line)
file.close()
for item in products: # show products
currentline = item.split(",") #split data where tyhe is a comma
total=total+int(currentline[1])
print("Total calories consumed:",total)
liftnumber()
#This deletes things
def deleteproduct():
products=[] #create a list whcih will hold all products from file
inventory.txt
currentindex=0 #this will be use4d to get an index
#position od utem to delete in list
file = open("inventory.txt","r")
for line in file: #put data frpom file into product
products.append(line)
file.close()
seeproducts() #show all the products
#enter product number to delete
deletethis=input("Enter name of the food to delete: ")
#loop through produces find matching number
#delete product from list
for item in products: #show products
currentline = item.split(",") #split data where comma
prodnumber = currentline[0] #get the item's product number
if prodnumber==deletethis:
break #found product to delete
currentindex=currentindex+1 #increment index for next product
del products[currentindex] #delete product at this index
#erase provios file
file = open('inventory.txt','r+')
file.truncate(0)
#write new file from list
for item in products:
with open("inventory.txt","a") as file:
file.write(item) #write product data
file.close()
#main program starts here
choice=""
while choice!="x": #loop to allows user to choice
#exit when the user chooses 'x'
choice=mainmenu()
if choice=="1":
enterproduct()
if choice=="2":
seeproducts()
if choice=="3":
deleteproduct()
if choice=="5":
finishday()
if choice=="4":
enterlift()
if choice=="6":
seelift()
Ожидаемый:
Я ожидал, что будет создан новый файл «totalcal.txt» и в него будет добавлено содержимое «инвентаризации.txt» (только цифры калорийности продуктов, а не названия продуктов) и «excercises.txt» (извините, если это кажется сбивающим с толку, но, под словами «добавил вместе», я имел в виду, что хотел, чтобы сожженные калории при физической нагрузке были вычтены из потребленных пищевых калорий), и поместил это в функцию, которая показывает это, печатая «общее количество калорий». «сгорел до израсходованного» и имеют либо отрицательное значение (если сжигание превышает количество потребляемых калорий), либо положительное (если количество потребляемых калорий превышает количество полученного)
Я бы вызвал эту функцию внутри finishday () ближе к концу, ниже вызова liftnumber ()
Выше я думаю, что это может быть сделано, но если вы сможете достичь результата, приведенного ниже, каким-либо другим способом, я также был бы очень признателен.
Итак, ожидаемый результат:
Вот как ты это сделал сегодня
..........................
Всего потреблено калорий: число1
Всего затраченных калорий: количество2
Всего сожженных или потребленных калорий: число1 - число2
..........................
Reality:
Я забыл точную ошибку, но она дает мне ошибку из-за невозможности добавить функции вместе на основе того, как я пытался решить проблему.
Спасибо