Josif_tepe

Untitled

Jul 22nd, 2025
419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.21 KB | None | 0 0
  1. import unittest
  2. import os
  3. import warnings
  4.  
  5. class NoWarning(unittest.TestCase):
  6.     def setUp(self):
  7.         warnings.simplefilter("ignore", ResourceWarning)
  8.  
  9. def unikati(s):
  10.     visited = {}
  11.     res = []
  12.  
  13.     for name in s:
  14.         if name not in visited:
  15.             res.append(name)
  16.             visited[name] = True
  17.  
  18.     return res
  19.  
  20. def skupnih(s, t):
  21.     set_s = set()
  22.     set_t = set()
  23.  
  24.     for name in s:
  25.         set_s.add(name)
  26.  
  27.     for name in t:
  28.         set_t.add(name)
  29.  
  30.     cnt = 0
  31.     for name in set_s:
  32.         if name in set_t:
  33.             cnt += 1
  34.  
  35.     return cnt
  36.  
  37. def vseh(s, t):
  38.     unique_elements = set()
  39.  
  40.     for name in s:
  41.         unique_elements.add(name)
  42.  
  43.     for name in t:
  44.         unique_elements.add(name)
  45.  
  46.     return len(unique_elements)
  47.  
  48. def preberi_datoteko(ime_dat, locilo):
  49.     res_arr = []
  50.     with open(ime_dat, "r") as f:
  51.         for line in f:
  52.             tmp_arr = line.split(locilo)
  53.             res_arr.append(tmp_arr)
  54.  
  55.     return res_arr
  56.  
  57. def filtriran(s, stolpec, vrednost):
  58.     res_arr = []
  59.     for arr in s:
  60.         if len(arr) > stolpec:
  61.             if type(vrednost) == type(arr[stolpec]) and vrednost == arr[stolpec]:
  62.                 res_arr.append(arr)
  63.  
  64.     return res_arr
  65. def izlusci(s, stolpec):
  66.     res_arr = []
  67.     for arr in s:
  68.         if len(arr) > stolpec:
  69.             res_arr.append(arr[stolpec])
  70.  
  71.     return res_arr
  72.  
  73. def predmeti(ime_dat, osebe):
  74.     visited = set()
  75.     arr = []
  76.     with open(ime_dat, "r") as f:
  77.         for line in f:
  78.             a = line.split(",")
  79.             if osebe == a[1]:
  80.                 if a[0] not in visited:
  81.                     visited.add(a[0])
  82.                     arr.append(a[0])
  83.  
  84.     return arr
  85. def osebe(ime_dat, predmet):
  86.     arr = []
  87.     visited = set()
  88.     with open(ime_dat, "r") as f:
  89.         for line in f:
  90.             a = line.split(",")
  91.             if a[0] == predmet:
  92.                 if a[1] not in visited:
  93.                     visited.add(a[1])
  94.                     arr.append(a[1])
  95.  
  96.     return list(arr)
  97.  
  98. def podobnost_oseb(ime_dat, oseba1, oseba2):
  99.     predmeti_1 = set()
  100.     predmeti_2 = set()
  101.     predmeti = set()
  102.     with open(ime_dat, "r") as f:
  103.         for line in f:
  104.             a = line.split(",")
  105.             if a[1] == oseba1:
  106.                 predmeti_1.add(a[0])
  107.                 predmeti.add(a[0])
  108.  
  109.  
  110.             if a[1] == oseba2:
  111.                 predmeti_2.add(a[0])
  112.                 predmeti.add(a[0])
  113.  
  114.     zaednicki = 0
  115.     for predmet in predmeti_1:
  116.         if predmet in predmeti_2:
  117.             zaednicki += 1
  118.  
  119.     return zaednicki / float(len(predmeti))
  120. def podobnost_predmetov(ime_dat, predmet1, predmet2):
  121.     p1 = set()
  122.     p2 = set()
  123.     p = set()
  124.  
  125.     with open(ime_dat, "r") as f:
  126.         for line in f:
  127.             a = line.split(",")
  128.             if a[0] == predmet1:
  129.                 p1.add(a[1])
  130.                 p.add(a[1])
  131.  
  132.             if a[0] == predmet2:
  133.                 p2.add(a[1])
  134.                 p.add(a[1])
  135.  
  136.     zaednicki = 0
  137.     for lice in p1:
  138.         if lice in p2:
  139.             zaednicki += 1
  140.  
  141.     return zaednicki / float(len(p))
  142.  
  143. class TestSeznami(NoWarning):
  144.     def test_01_unikati(self):
  145.         s = ["Ana", "Ana", "Berta", "Cilka", "Ana", "Berta", "Berta", "Berta", "Ema", "Dani", "Cilka"]
  146.         t = s.copy()
  147.         self.assertEqual(["Ana", "Berta", "Cilka", "Ema", "Dani"], unikati(s))
  148.         self.assertEqual(t, s, "Pusti seznam, ki ga funkcija dobi kot argument, pri miru!")
  149.         self.assertEqual([], unikati([]))
  150.         self.assertEqual(["Ana"], unikati(["Ana"]))
  151.         self.assertEqual([5, 8, 3], unikati([5, 8, 3]))
  152.         self.assertEqual([5, 8, 3], unikati([5, 5, 5, 5, 8, 5, 8, 8, 8, 3, 3, 3, 5]))
  153.  
  154.     def test_02_skupnih(self):
  155.         s = ["Ana", "Ana", "Berta", "Cilka", "Ana", "Berta", "Berta", "Berta", "Ema", "Dani", "Cilka"]
  156.         sc = s.copy()
  157.         t = ["Cilka", "Fanči", "Ana", "Ana", "Fanči", "Ana", "Cilka"]
  158.         tc = t.copy()
  159.         self.assertEqual(2, skupnih(s, t))
  160.         self.assertEqual(2, skupnih(t, s))
  161.         self.assertEqual(sc, s, "Pusti seznam, ki ga funkcija dobi kot argument, pri miru!")
  162.         self.assertEqual(tc, t, "Pusti seznam, ki ga funkcija dobi kot argument, pri miru!")
  163.         self.assertEqual(0, skupnih(s, ["Fanči", "Greta"]))
  164.         self.assertEqual(1, skupnih(t, ["Fanči", "Greta"]))
  165.         self.assertEqual(0, skupnih(s, []))
  166.         self.assertEqual(0, skupnih([], []))
  167.  
  168.     def test_03_vseh(self):
  169.         s = ["Ana", "Ana", "Berta", "Cilka", "Ana", "Berta", "Berta", "Berta", "Ema", "Dani", "Cilka"]
  170.         sc = s.copy()
  171.         t = ["Cilka", "Fanči", "Ana", "Ana", "Fanči", "Ana", "Cilka"]
  172.         tc = t.copy()
  173.         self.assertEqual(6, vseh(s, t))
  174.         self.assertEqual(6, vseh(t, s))
  175.         self.assertEqual(sc, s, "Pusti seznam, ki ga funkcija dobi kot argument, pri miru!")
  176.         self.assertEqual(tc, t, "Pusti seznam, ki ga funkcija dobi kot argument, pri miru!")
  177.         self.assertEqual(7, vseh(s, ["Fanči", "Greta"]))
  178.         self.assertEqual(4, vseh(t, ["Fanči", "Greta"]))
  179.         self.assertEqual(5, vseh(s, []))
  180.         self.assertEqual(0, vseh([], []))
  181.  
  182.  
  183. class TestProcesiranjeSeznamov(NoWarning):
  184.     def test_01_preberi_datoteko(self):
  185.         self.assertEqual([['Cube', '5031', '159', 'Janez', '2017\n'],
  186.                           ['Stevens', '3819', '1284', 'Ana', '2012\n'],
  187.                           ['Focus', '3823', '1921', 'Benjamin', '2019\n']],
  188.                          preberi_datoteko("kolesa.txt", "-"))
  189.         self.assertEqual([['slika', 'Berta', '31\n'],
  190.                           ['slika', 'Ana', '33\n'],
  191.                           ['slika', 'Berta', '35\n'],
  192.                           ['slika', 'Fanči', '37\n'],
  193.                           ['slika', 'Ana', '40\n']],
  194.                          preberi_datoteko("zapisnik.txt", ",")[:5])
  195.  
  196.     def test_02_filter(self):
  197.         s = [["Ana", 5, 9, "Berta"],
  198.              ["Cilka", 5, 12, "Berta"],
  199.              ["Ana", 5, 9, "Cilka"],
  200.              ["Berta", 5, 1, "Ana"]]
  201.         self.assertEqual(
  202.             [["Ana", 5, 9, "Berta"],
  203.              ["Ana", 5, 9, "Cilka"]], filtriran(s, 0, "Ana")
  204.         )
  205.         self.assertEqual(
  206.             [["Ana", 5, 9, "Cilka"],
  207.              ["Ana", 5, 9, "Berta"]], filtriran(s[::-1], 0, "Ana")
  208.         )
  209.         self.assertEqual(s, filtriran(s, 1, 5))
  210.         self.assertEqual([], filtriran(s, 0, "Dani"))
  211.         self.assertEqual([["Ana", 5, 9, "Cilka"]], filtriran(s, 3, "Cilka"))
  212.  
  213.     def test_03_izlusci(self):
  214.         s = [["Ana", 5, 9, "Berta"],
  215.              ["Cilka", 5, 12, "Berta"],
  216.              ["Ana", 5, 9, "Cilka"],
  217.              ["Berta", 5, 1, "Ana"]]
  218.         self.assertEqual(["Ana", "Cilka", "Ana", "Berta"], izlusci(s, 0))
  219.         self.assertEqual([5, 5, 5, 5], izlusci(s, 1))
  220.         self.assertEqual([9, 12, 9, 1], izlusci(s, 2))
  221.  
  222.  
  223. class TestDrazba(NoWarning):
  224.     def test_01_predmeti(self):
  225.         self.assertEqual(['slika', 'Meldrumove vaze'], predmeti("zapisnik.txt", "Ana"))
  226.         self.assertEqual(['slika', 'skodelice', 'kip', 'čajnik'], predmeti("zapisnik.txt", "Berta"))
  227.         self.assertEqual(['Meldrumove vaze', 'kip', 'srebrn jedilni servis'], predmeti("zapisnik.txt", "Cilka"))
  228.         self.assertEqual([], predmeti("zapisnik.txt", "Benjamin"))
  229.  
  230.         try:
  231.             os.rename("zapisnik.txt", "zapisnik-2.txt")
  232.             self.assertEqual(['slika', 'Meldrumove vaze'], predmeti("zapisnik-2.txt", "Ana"))
  233.         finally:
  234.             os.rename("zapisnik-2.txt", "zapisnik.txt")
  235.  
  236.     def test_02_osebe(self):
  237.         self.assertEqual(['Cilka', 'Ema', 'Berta', 'Dani', 'Greta'], osebe("zapisnik.txt", "kip"))
  238.         self.assertEqual(['Fanči', 'Helga'], osebe("zapisnik.txt", "perzijska preproga"))
  239.         self.assertEqual([], osebe("zapisnik.txt", "stol brez noge"))
  240.  
  241.     def test_03_podobnost_oseb(self):
  242.         self.assertAlmostEqual(0.2, podobnost_oseb("zapisnik.txt", "Ana", "Berta"))
  243.         self.assertAlmostEqual(0.5, podobnost_oseb("zapisnik.txt", "Cilka", "Ema"))
  244.         self.assertAlmostEqual(0.25, podobnost_oseb("zapisnik.txt", "Ana", "Cilka"))
  245.         self.assertAlmostEqual(1 / 6, podobnost_oseb("zapisnik.txt", "Berta", "Cilka"))
  246.         self.assertAlmostEqual(1, podobnost_oseb("zapisnik.txt", "Berta", "Berta"))
  247.  
  248.     def test_04_podobnost_predmetov(self):
  249.         self.assertAlmostEqual(0.4, podobnost_predmetov("zapisnik.txt", "kip", "skodelice"))
  250.         self.assertAlmostEqual(1 / 7, podobnost_predmetov("zapisnik.txt", "kip", "slika"))
  251.         self.assertAlmostEqual(0, podobnost_predmetov("zapisnik.txt", "kip", "perzijska preproga"))
  252.         self.assertAlmostEqual(1, podobnost_predmetov("zapisnik.txt", "kip", "kip"))
  253.  
  254.  
  255. # class TestPriporocila(NoWarning):
  256. #     def test_01_priporoci_predmet(self):
  257. #         self.assertEqual("srebrn jedilni servis", priporoci_predmet("zapisnik.txt", "kip"))
  258. #         self.assertEqual("Meldrumove vaze", priporoci_predmet("zapisnik.txt", "slika"))
  259. #
  260. #     def test_02_priporoci_prijatelja(self):
  261. #         self.assertEqual("Fanči", priporoci_prijatelja("zapisnik.txt", "Ana"))
  262. #         self.assertEqual("Dani", priporoci_prijatelja("zapisnik.txt", "Berta"))
  263. #
  264.  
  265. if __name__ == "__main__":
  266.     unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment