Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import os
- def calculate (ev1, av2):
- ev2 = float(math.log(pow(av2,2),2))
- rst = float(ev1 - ev2)
- if rst < 0:
- rst = float(abs(rst))
- result = float(pow(2,rst))
- return result
- def check(stringa):
- c = 0
- i = 0
- while i < len(stringa):
- car = stringa[i:i+1]
- if car == "0":
- c = c + 1
- if car == "1":
- c = c + 1
- if car == "2":
- c = c + 1
- if car == "3":
- c = c + 1
- if car == "4":
- c = c + 1
- if car == "5":
- c = c + 1
- if car == "6":
- c = c + 1
- if car == "7":
- c = c + 1
- if car == "8":
- c = c + 1
- if car == "9":
- c = c + 1
- if car == ".":
- c = c + 1
- i = i + 1
- if c == len(stringa):
- return True
- if c != len(stringa):
- return False
- def converti(tempo):
- if tempo > 3600:
- ore = int(tempo / 3600)
- temporest = tempo - (ore * 3600)
- minute = int(temporest / 60)
- sec = tempo - ((ore * 3600) + (minute * 60))
- if round(sec) == 60:
- minute = minute + 1
- sec = 0
- if round(minute) == 60:
- ore = ore + 1
- minute = 0
- result = str(ore) + "h" + str(round(minute)) + "m" + str(round(sec)) + "s"
- return result
- if tempo < 3600:
- minute = int(tempo / 60)
- sec = tempo - (minute * 60)
- if round(sec) == 60:
- minute = minute + 1
- sec = 0
- if round(minute) == 60:
- ore = ore + 1
- minute = 0
- result = str(round(minute)) + "m" + str(round(sec)) + "s"
- return result
- def fix(tempo, mymin, mymax, ev1, av2):
- evmin = (pow(av2,2)) / mymin
- evmin = math.log(evmin,2)
- evmin = float(evmin)
- evmax = (pow(av2,2)) / mymax
- evmax = math.log(evmax,2)
- evmax = float(evmax)
- result1 = abs(ev1 - evmin)
- result2 = abs(ev1 - evmax)
- if result2 > result1:
- return mymin
- if result1 > result2:
- return mymax
- if result1 == result2:
- return mymin
- return mymin
- def Abx(tempo):
- tempi = [8000,6400,5000,4000,3200,2400,2000,1600,1250,1000,800,640,500,400,320,250,200,160,125,100,80,60,50,40,30,25,20,15,13,10,8,6,5,4]
- t = []
- if tempo <= 3.33:
- return tempo
- if tempo >= 8300:
- return "NA for Canon Eos Shutter"
- if tempo > 3.33 and tempo < 4:
- result1 = 4 - tempo
- result2 = tempo - 3.33
- if result1 < result2:
- return 4
- if result1 > result2:
- return 3
- if result1 == result2:
- return 3
- if tempo < 8300 and tempo > 8000:
- return 8000
- tempo = tempo
- trovato = False
- k = 0
- while trovato == False:
- massimo = tempi[k]
- minimo = tempi[k+1]
- if ((tempo >= minimo) and (tempo <= massimo)) and (trovato == False):
- massimo = massimo
- minimo = minimo
- trovato = True
- k = k + 1
- result1 = massimo - tempo
- result2 = tempo - minimo
- result1 = abs(result1)
- result2 = abs(result2)
- if result1 > result2:
- return minimo
- if result2 > result1:
- return massimo
- if result2 == result1:
- return minimo
- def Abx2(tempo, ev1, av2):
- if tempo >= 0.3 and tempo < 0.4:
- return fix(tempo, 0.3, 0.4, ev1, av2)
- if tempo >= 0.4 and tempo < 0.5:
- return fix(tempo, 0.4, 0.5, ev1, av2)
- if tempo >= 0.5 and tempo < 0.6:
- return fix(tempo, 0.5, 0.6, ev1, av2)
- if tempo >= 0.6 and tempo < 0.8:
- return fix(tempo, 0.6, 0.8, ev1, av2)
- if tempo >= 0.8 and tempo < 1:
- return fix(tempo, 0.8, 1, ev1, av2)
- if tempo >= 1 and tempo < 1.3:
- return fix(tempo, 1, 1.3, ev1, av2)
- if tempo >= 1.3 and tempo < 1.6:
- return fix(tempo, 1.3, 1.6, ev1, av2)
- if tempo >= 1.6 and tempo < 2:
- return fix(tempo, 1.6, 2, ev1, av2)
- if tempo >= 2 and tempo < 2.5:
- return fix(tempo, 2, 2.5, ev1, av2)
- if tempo >= 2.5 and tempo < 3.2:
- return fix(tempo, 2.5, 3.2, ev1, av2)
- if tempo >= 3.2 and tempo < 4:
- return fix(tempo, 3.2, 4, ev1, av2)
- if tempo >= 4:
- return round(tempo)
- global dia
- global tempo1
- global num
- global den
- global av1
- global av2
- global temp1
- global strnum
- global strden
- global switch
- global ev2a,ev2b
- global ev2ai,ev2bi
- global ev1i
- global result
- global key
- dia = [1,1.2,1.4,1.7,1.8,2,2.4,2.5,2.8,3.2,3.4,3.5,4,4.5,5,5.6,6.3,7.1,8,9,10,11,13,14,16,18,20,22]
- os.system('clear')
- switch = False
- print("EV Calculator PRO for Python >= 3")
- print("by Metallaro1980 - andreaverdi@hotmail.com")
- print("")
- av1 = eval(input("Diaframma a tutta apertura: "))
- temp1 = input("Tempo a tutta apertura: ")
- if len(temp1) < 1: exit()
- if av1 < 0: exit()
- if temp1[len(temp1)-1:len(temp1)] == ".": exit()
- if temp1[len(temp1)-1:len(temp1)] == "/": exit()
- temp1 = temp1.replace("//", "/")
- i = 0
- while i < len(temp1):
- i = i + 1
- if temp1[i:i+1] == "/":
- switch = True
- strnum = temp1[0:i]
- strden = temp1[i+1:len(temp1)]
- if check(strnum) == False:
- exit()
- if check(strden) == False:
- exit()
- num = float(strnum)
- den = float(strden)
- if switch == True:
- tempo1 = num / den
- ev1 = (pow(av1,2)) / tempo1
- ev1 = math.log(ev1,2)
- ev1i = float(ev1)
- print ("EV: " + str(round(ev1,2)))
- print ("")
- for i in range(len(dia)):
- av2 = dia[i]
- if av2 != av1:
- tempo2 = calculate(ev1,av2)
- ev2a = (pow(av2,2)) / tempo2
- ev2a = math.log(ev2a,2)
- ev2ai = float(ev2a)
- ev2b = (pow(av2,2)) / (1/tempo2)
- ev2b = math.log(ev2b,2)
- ev2bi = float(ev2b)
- if round(ev2ai,2) == round(ev1i,2):
- if tempo2 < 60:
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2a,2)))
- else:
- backuptempo2 = round(tempo2,2)
- result = converti(tempo2)
- print (result + " (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2a,2)))
- else:
- if tempo2 <= 2.5:
- tempo2 = 1 / tempo2
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx(tempo2)
- tempo2st = str(tempo2)
- if (check(tempo2st) == False):
- print (str(tempo2) + " @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- if round(tempo2) == 3:
- tempo2 = 1/tempo2
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- if round(tempo2) == 2:
- tempo2 = 0.5
- backuptempo2 = "0.5"
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- print ("1/" + str(round(tempo2)) + " sec (1/" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- if switch == False:
- if check(temp1) == False:
- exit()
- tempo1 = float(temp1)
- ev1 = (pow(av1,2)) / tempo1
- ev1 = math.log(ev1,2)
- ev1ai = float(ev1)
- print ("EV: " + str(round(ev1,2)))
- print ("")
- for i in range(len(dia)):
- av2 = dia[i]
- if av2 != av1:
- tempo2 = calculate(ev1,av2)
- ev2a = (pow(av2,2)) / tempo2
- ev2a = math.log(ev2a,2)
- ev2ai = ev2a
- ev2ai = float(ev2a)
- ev2b = (pow(av2,2)) / (1/tempo2)
- ev2b = math.log(ev2b,2)
- ev2bi = float(ev2b)
- if round(ev2ai,2) == round(ev1ai,2) and round(ev2a,2) == round(ev1,2):
- if tempo2 < 60:
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2a,2)))
- else:
- backuptempo2 = round(tempo2,2)
- result = converti(tempo2)
- print (result + " (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2a,2)))
- else:
- if round(ev2bi,2) == round(ev1ai,2) and round(ev2b,2) == round(ev1,2):
- if tempo2 <= 2.5:
- tempo2 = 1 / tempo2
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx(tempo2)
- tempo2st = str(tempo2)
- if (check(tempo2st) == False):
- print (str(tempo2) + " @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- if round(tempo2) == 3:
- tempo2 = 1/tempo2
- backuptempo2 = round(tempo2,2)
- tempo2 = Abx2(tempo2, ev1, av2)
- print (str(tempo2) + " sec (" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- else:
- print ("1/" + str(round(tempo2)) + " sec (1/" + str(backuptempo2) + "sec) @" + str(av2) + " EV: " + str(round(ev2b,2)))
- print ("")
- key = input("Premere INVIO per terminare...")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement