"""
@author: Sander Janssens
"""
import collections
E3 = [1.0, 2.2, 4.7]
E6 = [1.00, 1.50, 2.20, 3.30, 4.70, 6.80]
E12 = [1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2]
E24 = [1.00, 1.10, 1.20, 1.30, 1.50, 1.60, 1.80, 2.00, 2.20, 2.40, 2.70, 3.00, 3.30, 3.60, 3.90, 4.30, 4.70, 5.10, 5.60, 6.20, 6.80, 7.50, 8.20, 9.10]
E48 = [1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53]
E96 = [1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76]
E192 = [1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09, 1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20, 1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32, 1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60, 1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76, 1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13, 2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34, 2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84, 2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12, 3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79, 3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17, 4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05, 5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56, 5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73, 6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41, 7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98, 9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88]
exponent = range(0,9)
def serieMenu(onderdeel):
reeksen = { "E3": ">20", "E6": "20", "E12": "10", "E24": "5", "E48": "2", "E96": "1", "E192": "<=0.5" }
reeksenLijst = { "E3": E3, "E6": E6, "E12": E12, "E24": E24, "E48": E48, "E96": E96, "E192": E192 }
print("volgende menu-items kunnen ingegeven worden om een E-reeks te kiezen voor " + onderdeel + " :")
for reeks, tolerantie in reeksen.items():
print(reeks + " voor onderdelen met een tolerantie van " + tolerantie + "%")
print("letop! de reeksen E48, E96, en E192 zijn niet voorzien van de missende waarden uit de E24 reeks")
keuze = input("uw keuze: ")
while not keuze in reeksen.keys():
print("Het lijkt er op dat u een onbestaand menu-item heeft ingevoerd. Probeer opnieuw a.u.b.")
keuze = input("uw keuze:")
return reeksenLijst[keuze]
def limietMenu(upDown):
print("geef de " + upDown + " op voor de weerstanden. Enkel weerstanden die in dit gebied vallen, kunnen in het resultaat gebruikt worden.")
print("geef dit getal volledig uitgeschreven weer. Wetenschappelijke notatie is niet toegestaan.")
while True:
try:
limiet = int(input(upDown + ": "))
except ValueError:
print("Dit is geen geldige " + upDown + ". Probeer opnieuw.")
continue
else:
return limiet
def rcMenu():
print("noteer hier de gewenste RC-tijd. Ook hier geldt dat geen wetenschappelijke notatie gebruikt kan worden.")
while True:
try:
rcTijd = float(input("RC-tijd: "))
except ValueError:
print("Dit is geen geldige RC-tijd. Probeer opnieuw.")
continue
else:
return rcTijd
def aantalResultatenMenu():
print("Het aantal resultaten dat maximaal weergegeven wordt.")
while True:
try:
aantal = int(input("aantal: "))
except ValueError:
print("Dit is geen geldig aantal. Probeer opnieuw.")
continue
else:
return aantal
def foutMenu():
print("De maximale afwijking die de theoretische waarde met de werkelijke mag hebben. In vullen in procent zonder '%'.")
while True:
try:
tolerantie = int(input("tolerantie: "))
except ValueError:
print("Dit is geen geldige tolerantie. Probeer opnieuw.")
continue
else:
return tolerantie
def findC(RC, series):
resultaat = []
for exp in exponent:
for weerstand in series:
resultaat.append([weerstand*10**exp, RC*(1/(weerstand*10**exp)), None])
return resultaat
def compareC(resultaat, series):
for exp in exponent:
for combinatie in resultaat:
for condensator in series:
if combinatie[2] == None:
combinatie[2] = condensator*10**-exp
elif abs(combinatie[1] - condensator*10**-exp) < abs(combinatie[1] - combinatie[2]):
combinatie[2] = condensator*10**-exp
def main():
RC_waarde = rcMenu()
bovengrens = limietMenu("bovengrens")
ondergrens = limietMenu("ondergrens")
C_series = serieMenu("de condensator")
R_series = serieMenu("de weerstand")
besteResultaten = aantalResultatenMenu()
maxFout = foutMenu()
iteratie = []
resultaten = findC(RC_waarde, R_series)
compareC(resultaten, C_series)
tussenResultaten = []
for index in range(len(resultaten)):
afwijking = abs(100*(resultaten[index][1] - resultaten[index][2])/resultaten[index][1])
setje = resultaten[index]
if afwijking <= maxFout and setje[0] in range(ondergrens, bovengrens):
setje.append(afwijking)
tussenResultaten.append(setje)
resultaten = sorted(tussenResultaten, key=lambda x: x[3])
for i in range(3):
print("")
for index in range(besteResultaten):
print("Een weerstand van " + '{:03.2e}'.format(float(resultaten[index][0])) + " ohm gecombineerd met een condensator van " + '{:03.2e}'.format(resultaten[index][2]) + " farad geeft een afwijking van " + '{:03.2e}'.format(resultaten[index][3]) + "%")
main()