-4

I am pulling my info from a txt file and everything works great. I just how need it to read only two decimal places.

import os.path

#define global variables
database = []#list to store monthly temperatures
DAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
WEEKS = 6

'''
This function read input from a text file and adds the data to the
list called database. The data values are added as strings.
Data for each week is one row in the list. '''
def getInputFromFile(filename = None):
    result = False
    if(filename == None):
        filename = input("Enter name of input file: ")
    if(os.path.isfile(filename)):
        infile = open(filename, 'r')
        count = 0
        for line in infile:
            week = line.strip()
            weekList = week.split()
            database.append(weekList)
            count += 1
        infile.close()
        return True
    else:
        print("Invalid filename ... aborting ...")

    return False

'''
This function creates and returns a list with seven values,
each one being a day average for that month.
'''
def getWeekAverages():
    pass
    weekAverages = []
    MAX = WEEKS
    total = 0
    for week in range (WEEKS):
        total = 0
        for day in range(len(DAYS)):
          total += int(database[week][day])
        weekAverages.append(total/7)
    return weekAverages

def getDayAverages():
    pass
    dayAverages = []
    MAX = WEEKS
    for day in range(len(DAYS)):
        total = 0
        for week in range (WEEKS):
            total += int(database[week][day])
        dayAverages.append(total/WEEKS)
    return dayAverages

temp function works but I need it to read only two decimal places

## Highest day average
def getHighestDayAverage(dayAverages):
    return max(dayAverages)

temp function works but I need it to read only two decimal places

## Lowest day average
def getLowestDayAverage(dayAverages):
    return min(dayAverages)

temp function works but I need it to read only two decimal places

## Hightest Week Average
def getHighestWeekAverage(weekAverages):
    return max(weekAverages)

temp function works but I need it to read only two decimal places

## Lowest Week Average
def getLowestWeekAverage(weekAverages):
    return min(weekAverages)

Highest temp function works but I need it to read only two decimal places

## Highest temp function
def getHighestTemp():
    highestTemp = int(database[0][0])

    for week in range (WEEKS):
        for day in range(len(DAYS)):
           if highestTemp < int(database[week][day]):
               highestTemp = int(database[week][day])
    return highestTemp

temp function works but I need it to read only two decimal places

## Lowest Temp function
def getLowestTemp():
    lowestTemp = int(database[0][0])

    for week in range (WEEKS):
        for day in range(len(DAYS)):
           if lowestTemp > int(database[week][day]):
               lowestTemp = int(database[week][day])
    return lowestTemp

Average temp function works but I need it to read only two decimal places

## Average Temp function

def getAverageTemp():
    total = 0
    for week in range (WEEKS):
        for day in range(len(DAYS)):
            total += int(database[week][day])
    return total / (WEEKS * len(DAYS))

Here is where everything is recalled
#Define other methods

def main():
    print("//////Welcome to the program that will get you High, Low, and Average tempertures of the month://////")
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
## this is where the file name is entered
    goodFile = getInputFromFile()
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    if(goodFile == True):
        dayAverages = getDayAverages()
        weekAverages = getWeekAverages()
        highestDay = getHighestDayAverage(dayAverages)
        lowestDay = getLowestDayAverage(dayAverages)
        highestWeek = getHighestWeekAverage(weekAverages)
        lowestWeek = getLowestWeekAverage(weekAverages)
        highestTemp = getHighestTemp()
        lowestTemp = getLowestTemp()
        averageTemp = getAverageTemp()
        dayIndex = dayAverages.index(lowestDay)
        print(weekAverages)
        print("Weekday with lowest average temperature was ", DAYS[dayIndex], " with ", dayAverages)
        print("Weekday with highest average temperature was ", DAYS[dayIndex], " with ", highestDay)

        print("Weekday with lowest average temperature was ", DAYS[dayIndex], " with ", lowestDay)

        print("The highest average temperature of a given week is: ", highestWeek)
        print("The lowest average temperature of a given week is: ", lowestWeek)
        print("The lowest temperature in a given day is the following: ", lowestTemp)
        print("The highest temperature in a given day is the following: ", highestTemp)
        print("The average temperature in a given day is the following: ", getAverageTemp())

    #... and so on

#call main program
main()
Tim
  • 41,901
  • 18
  • 127
  • 145
Chris Sowden
  • 15
  • 1
  • 5
  • 5
    Pretty much tl;dr - but this is a commonly asked question: http://stackoverflow.com/questions/455612/limiting-floats-to-two-decimal-points – Christofer Ohlsson Jan 18 '16 at 13:35
  • What happened to "minimal example" ? anyway, just use `'{:.2f}.format(your_float_value)'` as your string for output... now, for input, what your problem? Give an example. – tglaria Jan 18 '16 at 13:57
  • '{:.2f}.format(your_float_value)' when I try to use that, I am getting a syntax error... that is what I was doing...just not working...cant figure out why – Chris Sowden Jan 18 '16 at 14:25

1 Answers1

0

Should be '{:.2f}'.format(your_float_value) (the ' is in the wrong place)

Lewis Fogden
  • 515
  • 5
  • 8