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