Section #4: Lists & Animations
May 3rd, 2020
Written by Brahm Capoor
Lists Review
Collapse
def collapse(nums):
result = []
for i in range(len(nums)//2):
# since we're going pairs at a time, we only need
# to go as many as times as half the number of elements
result.append(nums[i * 2] + nums[i * 2 + 1])
if len(nums) % 2 == 1:
result.append(nums[-1])
return result
Distinct Elements
def distinct_elements(lst):
distinct_elems = []
for elem in lst:
if elem not in distinct_elems:
distrinct_elems.append(elem)
return distinct_elems
Rotate
def right_list_right(numbers, num):
output_list = []
for i in range(len(numbers) - num, len(numbers)):
output_list.append(numbers[i])
for i in range(0, len(numbers) - num):
output_list.append(numbers[i])
return output_list
Building a News Ticker
CANVAS_HEIGHT = 100
CANVAS_WIDTH = 500
DX = 4
DY = 0
DELAY = 0.01
def get_messages():
messages = []
message = input("Type a message here or press enter to finish: ")
while message != "":
messages.append(message)
message = input("Type a message here or press enter to finish: ")
return messages
def main():
messages = get_messages()
canvas = make_canvas(CANVAS_WIDTH, CANVAS_HEIGHT, "News Ticker")
current_message_index = 0
current_label = canvas.create_text(
CANVAS_WIDTH,
CANVAS_HEIGHT/2,
anchor='w',
font=('Calibri', '24'),
fill='Red',
text=messages[0],
)
while True:
canvas.move(current_label, -DX, DY)
canvas.update()
time.sleep(0.01)
if is_past_left_edge(canvas, current_label):
current_message_index += 1
if current_message_index == len(messages):
current_message_index = 0
current_label = canvas.create_text(
CANVAS_WIDTH,
CANVAS_HEIGHT/2,
anchor='w',
font=('Calibri', '24'),
fill='Red',
text=messages[current_message_index],
)
canvas.mainloop()
def is_past_left_edge(canvas, label):
right_x = get_right_x(canvas, label)
return right_x <= 0