Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import math
  4. import random
  5. import sys
  6.  
  7. class Latitude:
  8.     def __init__(self, lat):
  9.         self.latitude = lat
  10.         self.area = 500
  11.         self.sundigit = 10
  12.         self.randomlist = []
  13.         self.energy = []
  14.         self.cv = []
  15.  
  16.         self.months = {
  17.                 'January':[0,31],
  18.                 'February':[31,28],
  19.                 }
  20.  
  21.     def calcv(self, latitude, t):
  22.         return (23.5*math.sin(math.pi*(t-80)/180)+90-latitude)/90
  23.  
  24.     def decide(self, v):
  25.         """
  26.        Short desription
  27.        """
  28.         if 0 < v < 1:
  29.             return v**2
  30.         if v >= 1:
  31.             return 1
  32.         if v <= 0:
  33.             return 0
  34.  
  35.     def calcenergy(self, f):
  36.         """
  37.        Short desription
  38.        """
  39.         self.randomlist.append(random.random())
  40.         return self.area * f * self.sundigit * self.randomlist[-1]
  41.  
  42.     def gen_yearly_data(self):
  43.         """
  44.        Short desription
  45.        """
  46.         for t in xrange(365):
  47.             v = self.calcv(self.latitude, t)
  48.             f = self.decide(v)
  49.             self.cv.append(f)
  50.             self.energy.append(self.calcenergy(f))
  51.  
  52.     def show_month(self, m):
  53.         """
  54.        Generate a nice printout for specified month
  55.        """
  56.  
  57.         index, days = self.months[m]
  58.  
  59.         r, cv, energy = self.randomlist[index:index+days],\
  60.                         self.cv[index:index+days], \
  61.                         self.energy[index:index+days]
  62.  
  63.         print
  64.         print m
  65.         print len(m)*'='
  66.  
  67.         print "{:<4} {:<4} {:<4} {:<4} {:<4} {:<4} {:<4}".format(
  68.                 "Area", "soltal", "latitud", "dag",
  69.                 "solighetsfaktor","f(t,latitud)","W(t)")
  70.  
  71.         for a, b, c in zip(r, cv, energy):
  72.             print "{:<4} {:<4} {:<4} {:<4} {:.4f} {:.4f} {:.4f}".format(
  73.                     self.area,
  74.                     self.sundigit,
  75.                     self.latitude,
  76.                     index, a, b, c)
  77.             index += 1
  78.  
  79. def get_input():
  80.     """
  81.    Prompt user for input
  82.    """
  83.     number = int(input("How many latitudes do you want to calculate? "))
  84.     latitudes = []
  85.  
  86.     x=0
  87.     while x < number:
  88.         lat = int(input("latitude: "))
  89.         if lat > 0 and lat < 90:
  90.             latitudes.append(lat)
  91.             x = x + 1
  92.         else:
  93.             print("Next time say a latitude between 0 and 90")
  94.  
  95.     return latitudes
  96.  
  97. def main():
  98.     """
  99.    Main entrypoint for your program
  100.    """
  101.  
  102.     latitudes = get_input()
  103.     print latitudes
  104.  
  105.     # L contains a list of classes for the
  106.     # user specified latitudes. The method 'gen_yearly_data()'
  107.     # is called to calculate the data and store the result
  108.     # int member variables
  109.     L = [Latitude(i) for i in latitudes]
  110.     for i in L:
  111.         i.gen_yearly_data()
  112.  
  113.     # Now print some monthly data for a specific latitude
  114.     L[0].show_month('January')
  115.     L[0].show_month('February')
  116.  
  117. if __name__ == "__main__":
  118.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement