Final version
This commit is contained in:
parent
28d3a8a421
commit
03f9440798
121
u8/program.py
121
u8/program.py
@ -0,0 +1,121 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
class Node:
|
||||||
|
|
||||||
|
def __init__(self, text):
|
||||||
|
self.text = text
|
||||||
|
self.right = None
|
||||||
|
self.left = None
|
||||||
|
self.otazka = text.endswith("?")
|
||||||
|
|
||||||
|
|
||||||
|
def para_stromov(lines, index):
|
||||||
|
if index >= len(lines):
|
||||||
|
raise ValueError("Chybna databaza")
|
||||||
|
|
||||||
|
text = lines[index]
|
||||||
|
if not text:
|
||||||
|
raise ValueError("Chybna databaza")
|
||||||
|
|
||||||
|
node = Node(text)
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
if node.otazka:
|
||||||
|
node.left, index = para_stromov(lines, index)
|
||||||
|
node.right, index = para_stromov(lines, index)
|
||||||
|
|
||||||
|
return node, index
|
||||||
|
|
||||||
|
|
||||||
|
def pocet_nodov(node):
|
||||||
|
if not node:
|
||||||
|
return 0, 0
|
||||||
|
|
||||||
|
if node.otazka:
|
||||||
|
a_left, n_left = pocet_nodov(node.left)
|
||||||
|
a_right, n_right = pocet_nodov(node.right)
|
||||||
|
return 1 + a_left + a_right, n_left + n_right
|
||||||
|
else:
|
||||||
|
return 0, 1
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
lines = []
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
line = input()
|
||||||
|
except EOFError:
|
||||||
|
break
|
||||||
|
line = line.rstrip("\r")
|
||||||
|
if line == "":
|
||||||
|
lines.append("")
|
||||||
|
break
|
||||||
|
lines.append(line)
|
||||||
|
|
||||||
|
for line in sys.stdin:
|
||||||
|
lines.append(line.rstrip("\r\n"))
|
||||||
|
|
||||||
|
print("Expert zo zoo to vie.")
|
||||||
|
|
||||||
|
if not lines:
|
||||||
|
print("Chybna databaza")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
prvi = lines.index("")
|
||||||
|
except ValueError:
|
||||||
|
print("Chybna databaza")
|
||||||
|
return
|
||||||
|
|
||||||
|
stromlines = lines[:prvi]
|
||||||
|
vibir = [l.strip() for l in lines[prvi + 1 :] if l.strip() != ""]
|
||||||
|
|
||||||
|
if not stromlines:
|
||||||
|
print("Chybna databaza")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
root, druhy = para_stromov(stromlines, 0)
|
||||||
|
except Exception:
|
||||||
|
print("Chybna databaza")
|
||||||
|
return
|
||||||
|
|
||||||
|
if druhy != len(stromlines):
|
||||||
|
print("Chybna databaza")
|
||||||
|
return
|
||||||
|
|
||||||
|
n_pocet, a_pocet = pocet_nodov(root)
|
||||||
|
|
||||||
|
print(f"Pocet otazok: {n_pocet}")
|
||||||
|
print(f"Pocet odpovedi: {a_pocet}")
|
||||||
|
print("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.")
|
||||||
|
|
||||||
|
potocni = root
|
||||||
|
viber_indx = 0
|
||||||
|
|
||||||
|
while potocni.otazka:
|
||||||
|
print(potocni.text)
|
||||||
|
|
||||||
|
if viber_indx >= len(vibir):
|
||||||
|
print("Koniec vstupu")
|
||||||
|
return
|
||||||
|
|
||||||
|
choice = vibir[viber_indx]
|
||||||
|
viber_indx += 1
|
||||||
|
|
||||||
|
if choice != "a" and choice != "n":
|
||||||
|
print("Nerozumiem")
|
||||||
|
return
|
||||||
|
|
||||||
|
if choice == "a":
|
||||||
|
potocni = potocni.left
|
||||||
|
else:
|
||||||
|
potocni = potocni.right
|
||||||
|
|
||||||
|
print(potocni.text)
|
||||||
|
print("Koniec")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Reference in New Issue
Block a user