0

I'm self-learning how to code in Python.

I'm trying to code a "Calculator" that calculates how many hours/days I need to work to buy a product. I got this error and don't know how to fix it:

  File "D:\---\---\---\code.py", line 21, in <module>
    print("Para comprar um produto de " + str(preco) + " tem de trabalhar durante " + str(resultado.strftime("%d dias, %H horas e %M minutos.")))
AttributeError: 'datetime.timedelta' object has no attribute 'strftime'

Here is the entire code:

import datetime

while True:
    questao = input("Quer calcular em horas ou em dias?\nH ou D: ") 
    if questao == "H":
        salario = float(input("\nQuanto ganha por hora? "))
        preco = float(input("Quanto custa o produto? "))
        divisão = preco/salario
        resultado = datetime.timedelta(hours=divisão)
        break
    elif questao == "D":
        salario = float(input("\nQuanto ganha por dia? "))
        preco = float(input("Quanto custa o produto? "))
        divisão = preco/salario
        resultado = datetime.timedelta(days=divisão)
        break
    else:
        print("Inseriu algo que não existe, tente novamente!\n")
        continue

print("Para comprar um produto de " + str(preco) + " tem de trabalhar durante " + str(resultado.strftime("%d dias, %H horas e %M minutos.")))

Can someone help me fix this? Thanks :)

tomasspvarela
  • 13
  • 1
  • 5
  • 1
    timedeltas don't have a strftime method, there are examples for doing that here: https://stackoverflow.com/questions/538666/format-timedelta-to-string – Talon Jul 04 '21 at 20:04
  • 1
    Does this answer your question? [Format timedelta to string](https://stackoverflow.com/questions/538666/format-timedelta-to-string) – mkrieger1 Jul 04 '21 at 20:34
  • Now I understand what I have to do, but I don't know how to do it with my variable... – tomasspvarela Jul 04 '21 at 21:32

1 Answers1

1

You can get the .days value from the timedelta, and the seconds. Unlike other datetime objects, using .hour doesn't work. Then do math on the seconds to get hours and minutes. You can also just convert it to string if that's easier.

preco = 1000
salario = 6
divisão = preco / salario
resultado = datetime.timedelta(hours=divisão)  # 6 days, 22:40:00
print(str(resultado))
# 6 days, 22:40:00

days = resultado.days
seconds = resultado.seconds

hours = seconds//3600
minutes = (seconds//60) % 60

print(str(days), 'dias', str(hours), 'horas e', str(minutes), 'minutos.')
# 6 dias 22 horas e 40 minutos.
Hammurabi
  • 1,141
  • 1
  • 4
  • 7