Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- # importowanie bibliotek
- from __future__ import division
- from Tools.scripts.treesync import raw_input
- import numpy
- def program():
- print("\n====================Informatyka Chemiczna - Zadanie 2 - Langmuir====================\n")
- # zmienne
- nMaksymalne = 0
- aMaksymalne = 0
- korelacja = 0
- masaAbsorbenta = 0
- naglowkiKolumn = 0
- a = [];
- b = [];
- kolumnyDanych = 2
- wierszeDanych = 100
- licznik = 0
- daneWejsciowe = [[0 for x in range(kolumnyDanych)] for y in range(wierszeDanych)]
- # zapytanie o plik z danymi
- nazwaPliku = input("Podaj nazwę pliku z danymi wejściowymi wraz z rozszerzeniem, np.: dane.txt")
- # otworzenie pliku w trybie odczytu
- # with open("dane.txt", 'r') as plikWejsciowy:
- with open(nazwaPliku, 'r') as plikWejsciowy:
- # wczytanie wartosc z pierwszej linijki
- nazwa, wartosc = plikWejsciowy.readline().partition("=")[::2]
- masaAbsorbenta = float(wartosc)
- # wczytanie nagłówków
- naglowkiKolumn = plikWejsciowy.readline().split()
- # pętla na pozostałe linijki z pliku wejściowego
- for licznik, linijka in enumerate(plikWejsciowy):
- # pobieranie liczb z jednej linjki
- liczby = linijka.split()
- # oddzielnie pobranych liczb
- temp = [float(x) for x in liczby]
- # zapis odczytanych danych do tablicy
- daneWejsciowe[licznik][0] = temp[0]
- daneWejsciowe[licznik][1] = temp[1]
- # przy okazji wczytywania danych za każdym razem wykonuję porównanie aby znaleźć nMaksymalne
- if daneWejsciowe[licznik][0] > nMaksymalne:
- nMaksymalne = daneWejsciowe[licznik][0]
- # obliczam aMaksymalne
- aMaksymalne = nMaksymalne / masaAbsorbenta
- # obliczam a dla każdej pary n/p danych
- for wiersz in daneWejsciowe:
- a.append(wiersz[0] / masaAbsorbenta)
- # obliczam b dla każdej pary n/p danych
- for licznik, wiersz in enumerate(daneWejsciowe):
- b.append(float(1.0 / ((wiersz[1] * aMaksymalne) / (a[licznik])) - wiersz[1] * 1.0))
- # obliczam korelację na podstawie kolumny danych n i p
- korelacja = numpy.corrcoef([a[0] for a in daneWejsciowe], [a[1] for a in daneWejsciowe])[0, 1]
- try:
- decyzjaFormatWyniku = int(raw_input("Zdecyduj czy chcesz wyniki działania programu skierować do pliku - wpisując 1 lub do konsoli - wpisując 2"))
- except ValueError:
- print("Niewłaściwa wartość")
- try:
- decyzjaWzory = int(raw_input( "Chcesz przeprowadzić dodatkowe obliczenia na innych wzorach? Wpisz 1 dla wzorów 3 i 4 lub wpisz 2 dla wzorów 5 i 6"))
- except ValueError:
- print("Niewłaściwa wartość")
- if decyzjaWzory == 1:
- # liczonko wedlug wzorów 3 i 4
- print(" ")
- else:
- # liczonko wedlug wzorów 5 i 6
- print(" ")
- if decyzjaFormatWyniku == 1:
- # zapytanie o plik z wynikami
- nazwaPliku = input("Podaj nazwę pliku do którego chcesz zapisać wyniki wraz z rozszerzeniem, np.: wyniki.txt")
- # wypisuję dane do pliku
- with open(nazwaPliku, 'w') as plikWyniku:
- #formatowanie dantch i zapisywanie linijka po linijce do pliku wynikowego
- linijka = "%s%f" % ("aMaksymalne=", aMaksymalne)
- plikWyniku.writelines(linijka)
- linijka = "%s%f" % ("\nMaksymalne=", nMaksymalne)
- plikWyniku.writelines(linijka)
- linijka = "%s%f" % ("\nKorelacja=", korelacja)
- plikWyniku.writelines(linijka)
- linijka = "%s%f" % ("\nMasa absorbenta=", masaAbsorbenta)
- plikWyniku.writelines(linijka)
- # sprawdzam, czy korelacja jest równa 0
- if korelacja == 0:
- plikWyniku.writelines("\nAbsorbat nie ulega dysocjacji\n")
- # sprawdzam, czy korelacja jest większa od 0
- if korelacja > 0:
- plikWyniku.writelines("\nAbsorbat ulega dysocjacji\n")
- linijka = "%s%s%s%s%s" % ("\n", naglowkiKolumn[0], "\t\t\t", naglowkiKolumn[1], "\t\ta\t\t\tb\n")
- plikWyniku.writelines(linijka)
- for licznik, row in enumerate(daneWejsciowe):
- linijka = "%f\t%f\t%f\t%f\n" % (row[0], row[1], a[licznik], b[licznik])
- plikWyniku.writelines(linijka)
- else:
- # wypisuję dane do konsoli
- print("====================Wyniki====================")
- print("aMaksymalne=", aMaksymalne)
- print("nMaksymalne=", nMaksymalne)
- print("Korelacja=", korelacja)
- print("Masa absorbenta=", masaAbsorbenta)
- if korelacja == 0:
- print("Absorbat nie ulega dysocjacji")
- # sprawdzam, czy korelacja jest większa od 0
- if korelacja > 0:
- print("Absorbat ulega dysocjacji")
- print(naglowkiKolumn[0], "\t\t\t", naglowkiKolumn[1], "\ta\t\t\tb")
- for licznik, row in enumerate(daneWejsciowe):
- linijeczka = "%f\t%f\t%f\t%f" % (row[0], row[1], a[licznik], b[licznik])
- print(linijeczka)
- koniec = input("Jeśli chcesz kontynuować wpisz Tak lub Nie jeśli chcesz zakończyć działanie programu")
- if koniec == "Tak":
- program()
- program()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement