FreeButtPlugs
FreeButtPlugs

Reputation: 9

How do i make a code that keeps an artificial time?

I'm making a code in python that measures time in D&D, but the its not keeping the time accurately and will sometimes give the time with a bunch of zeros after the seconds, also i cant get the am pm feature to work.

import time

hour=int(input("how many seonds is one hour in your D&D?"))
minutes = hour/60
hour_time=10
day_time="Am"
minutes_time=0.00
true = 1
while true == 1:
    time.sleep (minutes)
    if hour_time==12 and minutes_time==0:
        if day_time=="Am":
            day_time="Pm"
        else:
            day_time="Am"
    if minutes_time>0.59:
        minutes_time = 0
        if hour_time==12: 
            hour_time = 1
        else:
            hour_time = hour_time + 1
    else:
        minutes_time = minutes_time + 0.01
    print(minutes_time+hour_time,"",day_time)

Upvotes: 0

Views: 62

Answers (1)

Tim
Tim

Reputation: 2231

The reason why you sometime get lots of zeroes is a formatting problem. You can specify a format to numbers in Python, just as in:

print("{:.2f}".format(minutes_time+hour_time),"",day_time)

Before:

10.33  Am
10.34  Am
10.35  Am
10.36  Am
10.370000000000001  Am
10.38  Am
10.39  Am
10.4  Am

After:

10.16  Am
10.17  Am
10.18  Am
10.19  Am
10.20  Am
10.21  Am
10.22  Am
10.23  Am
10.24  Am
10.25  Am
10.26  Am

Please note that over the running period of your program a precision error propagates when accumulating in minutes_time = minutes_time + 0.01. Floats have computing precision limits you can get rid of using Python's fractions.Fraction for example.

Here is a working example of your code that uses Fraction:

import time
from fractions import Fraction

hour=int(input("how many seonds is one hour in your D&D?"))
minutes = hour/60
hour_time=10
day_time="Am"
minutes_time=Fraction(0, 1)
true = 1
while true == 1:
    time.sleep (minutes)
    if hour_time==12 and minutes_time==0:
        if day_time=="Am":
            day_time="Pm"
        else:
            day_time="Am"
    if minutes_time>=Fraction(59, 100):
        minutes_time = 0
        if hour_time==12: 
            hour_time = 1
        else:
            hour_time = hour_time + 1
    else:
        minutes_time = minutes_time + Fraction(1, 100)
    print("{:.2f}".format(float(minutes_time)+hour_time),"",day_time)

Upvotes: 1

Related Questions