-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdisplay_terminals.py
More file actions
131 lines (107 loc) · 4.46 KB
/
display_terminals.py
File metadata and controls
131 lines (107 loc) · 4.46 KB
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
'''
display terminals
type:class\n
name-format: [name]\n
Seven segment display
'''
'''
###
# #
# #
###
# #
# #
###
Output : 0-9 and a-f same as A-F
'''
'''Seven segment display'''
class seven_segment_display():
# to check inputs are valid or not
def __check_binary(data):
if len(data) != 7:
raise ValueError("Invalid amount of values , exact 7 required!")
for i in data:
if i not in [0,1]:
raise ValueError("Invalid Values , Binary only")
def __init__(self,data):
seven_segment_display.__check_binary(data)
self.input = data
def get_display_output(self):
## string formats
final_string = [" "," "," "," "," "," "," "]
horizontal_rows = " ### "
vertical_rows = [(("# #"),("# #")) , (("# "),("# " )),(( " #"),(" #"))]
# flags to check status
middle_string_flag = False
vertical_string_1_flag = False # if upper left vertical line is on (f)
vertical_string_2_flag = False # if upper right vertical line is on (b)
# handling horizonatal rows (a , d , g)
if self.input[0] == 1: # a
final_string[0] = horizontal_rows
if self.input[3] == 1: # d
final_string[-1] = horizontal_rows
if self.input[6]: # g
final_string[3] = horizontal_rows
middle_string_flag = True
# handling upper 2 vertical rows (f , b)
if self.input[5] == 1:
if self.input[1] == 1:
final_string[1:3] = vertical_rows[0]
vertical_string_1_flag = True
vertical_string_2_flag = True
else:
final_string[1:3] = vertical_rows[1]
vertical_string_1_flag = True
else:
if self.input[1] == 1:
final_string[1:3] = vertical_rows[2]
vertical_string_2_flag = True
# handling lower 2 vertical rows (e , c)
if self.input[4] == 1:
if self.input[2] == 1:
final_string[4:6] = vertical_rows[0]
# padding to join vertical lines if both on
if middle_string_flag == False:
temp = list(final_string[3])
if vertical_string_1_flag == True:
temp[0] = "#"
if vertical_string_2_flag == True:
temp[-1] = "#"
final_string[3] = "".join(temp)
else:
final_string[4:6] = vertical_rows[1]
# padding to join vertical lines if both on
if middle_string_flag == False:
temp = list(final_string[3])
if vertical_string_1_flag == True:
temp[0] = "#"
final_string[3] = "".join(temp)
else:
if self.input[2] == 1:
final_string[4:6] = vertical_rows[2]
# padding to join vertical lines if both on
if middle_string_flag == False:
temp = list(final_string[3])
if vertical_string_2_flag == True:
temp[-1] = "#"
final_string[3] = "".join(temp)
return "\n".join(final_string)
def update_pins(self,data):
seven_segment_display.__check_binary(data)
self.input = data
def display_number(self,number):
# check hexadecimal only
if number not in [0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f","A","B","C","D","E","F"]:
raise ValueError("Invalid value , 0-9 and a-f values only!")
# designing pattern stored
designs_for_numbers = [[1,1,1,1,1,1,0],[0,1,1,0,0,0,0],[1,1,0,1,1,0,1],[1,1,1,1,0,0,1],[0,1,1,0,0,1,1],[1,0,1,1,0,1,1],[1,0,1,1,1,1,1],[1,1,1,0,0,0,0],[1,1,1,1,1,1,1],[1,1,1,1,0,1,1]]
designs_for_characters = [[1,1,1,0,1,1,1],[0,0,1,1,1,1,1],[1,0,0,1,1,1,0],[0,1,1,1,1,0,1],[1,0,0,1,1,1,1],[1,0,0,0,1,1,1]]
# return display output for numbers
if str(number).isdigit():
self.input = designs_for_numbers[number]
return self.get_display_output()
# returns display output for characters A-F or a-f
else:
number = number.upper()
self.input = designs_for_characters[ord(number) - 65]
return self.get_display_output()