Advertisement
Acer1968

Šestiúhelník z čísel

Feb 3rd, 2022
1,465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. """
  2. Program pro vykreslení velkého šestiúhelníku z malých šestiúhelníčků, kde každý malý šestiúhelníček je reprezentován jedním z jedinečných čísel.
  3.  
  4. Program si vyžádá délku hrany šestiúhelníku. Poté vypočte, kolik šestiúhelníčků je třeba na sestavení velkého šestiúhelníku z malých šestiúhelníčků tak, aby každá hrana velkého šestiúhelníku měla délku hrany zadanou uživatelem.
  5. Pro tento počet program vygeneruje seznam jedinečných čísel reprezentujících malé šestiúhelníčky. Tento seznam promíchá.
  6. Následně vytiskne velký šestiúhelník, kde každý malý šestiúhelníček je reprezentovaný jedním z jedinečných čísel v promíchaném seznamu tak, že začne vlevo nahoře a postupně vyplní všemi čísly ze seznamu celý velký šestiúhelník až doprava dolů.
  7. """
  8.  
  9. import collections
  10. import math
  11. import random as rnd
  12. import itertools as it
  13.  
  14. MIN_NUM = 3
  15. MAX_NUM = 11
  16.  
  17.  
  18. class Pool:
  19.     def __init__(self, minEdge):
  20.         self.edge = minEdge
  21.         self.vNumber = 3 * self.edge * (self.edge - 1) + 1
  22.         self.hight = self.edge * 2 - 1
  23.         self.pool = [x for x in range(1, self.vNumber + 1)]
  24.  
  25.     def getVavNumber(self, minEdge):
  26.         edge = minEdge
  27.         return 3 * edge * (edge - 1) + 1
  28.  
  29.     def shuffle_pool(self):
  30.         rnd.shuffle(self.pool)
  31.  
  32.     def pooling(self):
  33.         num = 0
  34.         while num < len(self.pool):
  35.             yield self.pool[num]
  36.             num += 1
  37.  
  38.     def print_pool(self):
  39.         ind = 0
  40.         cif = len(str(self.vNumber))
  41.         x = self.pooling()
  42.         CRED = '\033[91m'
  43.         CEND = '\033[0m'
  44.         print()
  45.         for j in range(self.edge, self.hight + 1):
  46.             for k in range(self.edge, self.edge + j):
  47.                 numInStr = str(next(x)).zfill(cif)
  48.                 if k == self.edge:
  49.                     for l in range(self.hight - j, 0, -1):
  50.                         print("  ", end="")
  51.                 print(f" {numInStr} ", end="")
  52.                 if k == self.hight + j - self.edge:
  53.                     for l in range(self.hight - j, 0, -1):
  54.                         print("  ", end="")
  55.             print("")
  56.         for j in range(self.hight, self.edge, -1):
  57.             for k in range(self.edge, self.edge + j - 1):
  58.                 numInStr = str(next(x)).zfill(cif)
  59.                 if k == self.edge:
  60.                     for l in range(self.hight - j + 1, 0, -1):
  61.                         print("  ", end="")
  62.                 print(f" {numInStr} ", end="")
  63.                 if k == self.hight + j - self.edge - 1:
  64.                     for l in range(self.hight - j, 0, -1):
  65.                         print("  ", end="")
  66.             print()
  67.         print()
  68.         pass
  69.  
  70.  
  71. class Tips:
  72.     def __init__(self, numOfNumbers):
  73.         self.numOfNumbers = numOfNumbers
  74.         pass
  75.  
  76.  
  77. if __name__ == '__main__':
  78.     print("Vykreslení hexagonu z čísel")
  79.     while True:
  80.         input_message = f"Délka hrany? (zadej číslo od {MIN_NUM} do {MAX_NUM}): "
  81.         myEdge = input(input_message)
  82.         try:
  83.             myEdge = int(myEdge)
  84.             if myEdge >= MIN_NUM and myEdge <= MAX_NUM:
  85.                 break
  86.             else:
  87.                 print(f"Platné hodnoty jsou čísla {MIN_NUM} až {MAX_NUM} !!! Zkus znovu.")
  88.         except ValueError:
  89.             print(f"Jen čísla {MIN_NUM} až {MAX_NUM} jsou akceptována!")
  90.  
  91.     o = Pool(myEdge)
  92.     print(f"Vavřincovo číslo pro délku hrany {o.edge}: {o.vNumber}")
  93.     print(f"Vavřincovo číslo pro maximální délku hrany {MAX_NUM}: {o.getVavNumber(MAX_NUM)}")
  94.     print("Před zamícháním: ", o.pool)
  95.     o.shuffle_pool()
  96.     print("Po zamíchání: ", o.pool)
  97.     x = o.pooling()
  98.     for i in range(len(o.pool)):
  99.         print(f"{i+1}. tažené číslo je: {next(x)}")
  100.     o.print_pool()
  101.  
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement