-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsession7.py
278 lines (224 loc) · 7.94 KB
/
session7.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
abeceda = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def xor_dec(enc_msg: list, heslo: str):
"""
Funkcia decryptuje pomocou funkcie XOR a hesla spravu, ktora bola zasifrovana do cisel.
:param enc_msg: zoznam cisel - zasifrovana sprava list
:param heslo: heslo String
:return: Desifrovana sprava string
"""
dec_msg = "" # prazdny string
prepared_heslo = (100 * heslo)[:len(enc_msg)]
for i in range(0,len(enc_msg)):
# print("ENC_znak", enc_msg[i], "ZNAK v ABECEDE: ", abeceda.index(prepared_heslo[i]))
dec_znak = enc_msg[i] ^ abeceda.index(prepared_heslo[i]) #
# print(dec_znak, abeceda[dec_znak])
dec_msg += abeceda[dec_znak]
return dec_msg
# Interpretovany alebo Kompilovany ? Interpretovany
# Vysokourovnovy jazyk,
# Objekto-orientovany
# Interaktivna konzola
# pouzite skriptu, ktory spustime cez terminal
# P R O G R A M N A S K U S A N I E O T A Z O K
# Program na testovanie otazok a,b,c
# Otazky si dame do Slovnika dict() {"Otazka": ["a - Odpoved1", "b-Odpoved2", "c - Odpoved3", "c"]}
# Nekonecny cyklus while True:
# Otazky budeme vyberat pomocou random.choice()
# odpovedat budeme pomocou prikazu input()
# vyhodnotime spravne odpovede
a = 65436
print(type(a))
print(dir(a))
print(abs(a))
print(a.bit_length())
print(a.to_bytes(2, byteorder="little"))
print(a.__hash__())
a = "Hello World"
print(type(a))
print(a.capitalize())
print(a.casefold()) # agresivnejsie capitalize
print(a.center(24, "_"))
print(a.count("l"))
print(a.encode(encoding="utf8", errors="strict"))
print(a.endswith(("d","o"), 0, 5))
print(a+"\tDobre\t".expandtabs(tabsize=4))
print(a.find("llo", 0, len(a))) # nevyhodi chybu
print("Hello", "World", "Ako sa Mas ?")
# F O R M A T O V A N I E T E X T U
a = "Toto je udaj {0} vlozeny formatovanim textu {1}"
print(a.format("HODNOTA0", "HODNOTA1"))
print(a.index("udaj", 0, len(a))) # vyhodi chybu
print("alpha5435".isalnum())
print("Andrej54356".isalpha())
print(a.isascii())
print("54343hello".isdecimal())
print("43".isdigit())
print("Az_4535".isidentifier())
print("4343fhdjshf!!".isidentifier())
print("Az_4535".islower())
print("Az_4535".isnumeric())
print("Az_4535".isprintable())
print("Az_4535".isspace())
a = "Hello"
print(a.join(" WOrld"))
print(a.lstrip("H"))
print(a.removeprefix("H"))
print(a.removesuffix("o"))
print(a.swapcase())
print(a.replace("H", "A"))
print("4535".zfill(8))
'''
P O K R O C I L E F O R M A T O V A N I E T E X T U
'''
print("Tento %(jazyk)s je uradny jazyk pre %(obyvatelov)05d na Mauriciu." %
{"jazyk": "Francuzsky", "obyvatelov": 5435})
print(f"Tento %(jazyk)s je uradny jazyk pre %(obyvatelov)05d na Mauriciu." %
{"jazyk": "Francuzsky", "obyvatelov": 5435})
'''
Modul csv - Comma Separated Variables
'''
import csv
a = [12, True, "Jolana", 5453.543]
b = [143, False, "Artur", 17.30]
# ZAPISAL DO CSV SUBORU
with open("data.csv", mode="w", newline="") as csvfile:
datawriter = csv.writer(csvfile, dialect='excel', delimiter=" ")
datawriter.writerow(a)
datawriter.writerow(b)
# NACITAL Z CSV SUBORU
with open("data.csv", mode='r', newline="") as csvfile:
datareader = csv.reader(csvfile, delimiter=" ")
for riadok in datareader:
print(riadok)
with open("names.csv", mode="w", newline="") as csvfile:
fieldnames = ["meno", 'priezvisko']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({"meno": "Jozef", "priezvisko": "Mrkvicka"})
writer.writerow({"meno": "Bohuslav", "priezvisko": "Kovac"})
writer.writerow({"meno": "Roman", "priezvisko": "Kristof"})
with open("names.csv", mode="r", newline="") as csvfile:
datareader = csv.DictReader(csvfile)
for riadok in datareader:
print(riadok['meno'], riadok['priezvisko'])
print(csv.list_dialects())
def collatz(n):
while n != 1:
print(n)
if n % 2 == 0:
n = n /2
else:
n = 3 * n + 1
collatz(29)
import os
def Vernam_enc(sprava: str):
"""
Vernamova skoro nerozlusknutelna sifra pouziva funkciu XOR spolu s nahodnymi cislami s vysokou
entropiou. Nam ju zabezpeci modul os metodou urandom, ktory vyuziva kryptograficky silny generator
v TPM chipe Vaseho pocitaca.
TPM je kryptograficky chip na generovanie a uchovavanie kryptografickych klucov.
:param sprava: textova sprava String
:return: ciselne hodnoty zasifrovanej spravy list
"""
kluc = os.urandom(len(sprava))
preparovany_kluc = list()
enc_sprava = []
for i in kluc:
preparovany_kluc.append(i)
print(kluc, preparovany_kluc)
for i in range(0, len(sprava)):
enc_znak = abeceda.index(sprava[i]) ^ preparovany_kluc[i]
print(enc_znak)
enc_sprava.append(enc_znak)
return enc_sprava
print(Vernam_enc("BRYNDZAZDRAZELA"))
# TODO Spravit Vernam_decrypt
# TODO Prestavka do 20:15
'''
ZETELLKASTEN system
'''
import random
baza_dat = dict() # tu budu vsetky nase data SLOVNIK
def generuj_id():
"""
Funkcia nam generuje id cislo karticky. Pomocou odkazov na id cislo vieme prepajat karticky
s poznatkami
:return:
"""
id = random.randint(0, 1000000)
if skontroluj_id_duplicitu(id) is False:
return str(id).zfill(6)
return
def skontroluj_id_duplicitu(id: int):
"""
Funkcia kontroluje ci existuje duplicita medzi id cislami v databaze
:param id: cislo od 0 do 1000000
:return: Boolean hodnota ak je duplicita True ak nie je False
"""
for i in baza_dat.keys():
if id in baza_dat[i][0]: # ked je True # TODO Skontrolovat TypeError unhashable type list
print("DUPLICITA")
return True
else:
print("DUPLICITA NEJESTVUJE")
return False
def basic_view():
"""
Zakladny vypis z databazy aby sme vedeli jej obsah
:return: Nevracia nic - TODO neskor moze vraciat status
"""
for i in baza_dat.keys():
print(i, baza_dat[i][0], baza_dat[i][1], baza_dat[i][2], baza_dat[i][3] )
return
def nova_karticka():
"""
Funkcia pomocou ktorej definujeme novu karticku
:return:
"""
print("ZADAJ NOVU KARTICKU DO SYSTEMU ZETTELKASTEN")
nazov_karticky = input("NAZOV KARTICKY")
skontroluj_nazov_karticky(nazov_karticky)
id_cislo = generuj_id()
linky = zadaj_linky() # Tu volame funkciu na zadanie liniek na karticku
tagy = zadaj_tagy() # Tu volame funkciu na zadavanie tagov na karticku
obsah_karticky = input("TEXT KARTICKY")
baza_dat[nazov_karticky] = [id_cislo, linky, tagy, obsah_karticky] # Tu sa uklada nova karticka do Slovnika
def skontroluj_nazov_karticky(nazov):
if nazov == "":
print("NEVYHOVUJUCI NAZOV KARTICKY")
nova_karticka()
def zadaj_linky(): # [[id]]
result = list()
while True:
command = input("ZADAJ LINKU ALEBO q PRE UKONCENIE")
if command == "q":
break
else:
prepare_link = "[[ " + command + " ]]"
print(prepare_link)
result.append(prepare_link)
# TODO Sprav funkciu, ktora bude vyberat z existujucich karticiek
print(result)
return result
def zadaj_tagy(): # [[id]]
result = list()
while True:
command = input("ZADAJ TAG ALEBO q PRE UKONCENIE")
if command == "q":
break
else:
prepare_link = "#" + command + " "
print(prepare_link)
result.append(prepare_link)
# TODO Sprav funkciu, ktora bude vyberat z existujucich karticiek
print(result)
return result
while True:
""" HLAVNY PROGRAM, KTORY POMOCOU NEKONECNEHO CYKLU PRIJIMA PRIKAZY OD UZIVATELA"""
cmd = input("ZADAJ PRIKAZ q-quit|n-new|v-view") # vstup z klavesnice uzivatela
if cmd == "q": # ak je command q -> ukonci program
break
elif cmd == "n": # ak je command n -> vytvor novu karticku
nova_karticka() # vola funkciu nova karticka
elif cmd == "v": # ak je prikaz v -> zobraz zakladny vypis z dayabazy
basic_view() # vola funkciu zakladny vypis