Working with user input and dictionaries inside of lists Coming to the close of week 1 learning a programming language (Python)

Looking for general review, comments, and tips

Objective of Code

The objective here was to practice pulling information from dictionaries within lists and also adding dictionaries created from user input.

Code

def make_album(artist, album, tracks =''):
    catalog = {}
    catalog['artist_name'] = artist
    catalog['album_title'] = album
    catalog['tracks'] = tracks

    return catalog

def ask_user(message):
    user_input =''
    while not user_input:
        user_input = input(message)
    return user_input

riven = make_album('Zeppelin', 'Houses of the Holy', 8)
jax = make_album('Tool', 'Lateralus', 13)
vayne = make_album('Pink Floyd', 'Dark Side of the Moon')

differents = [riven, jax, vayne]

while True:
    print("type q to quit")
    band = ask_user("Enter artist: ")
    if band == "q":
        break
    album = ask_user("Enter album: ")
    if album == 'q':
        break
    numbers = input("Enter number of tracks: ")
    if numbers == 'q':
        break
    fire = make_album(band.title(), album.title(), numbers)
    differents.append(fire) 


for i in differents:
    if i['tracks']:
        print('\n' + i['album_title'] + ' by ' \
            + i['artist_name'] + ' it has '\
            + str(i['tracks']) +' tracks.')
    else:
        print('\n' +  i['album_title'] + ' by ' + i['artist_name'] \
            + '.')


Output

vash@localhost:~/pcc/8$ python3 lot2learn.py
type q to quit
Enter artist: circa survive
Enter album: juturna
Enter number of tracks: 11
type q to quit
Enter artist: dance gavin dance
Enter album: happiness
Enter number of tracks:
type q to quit
Enter artist: q

Houses of the Holy by Zeppelin it has 8 tracks.

Lateralus by Tool it has 13 tracks.

Dark Side of the Moon by Pink Floyd.

Juturna by Circa Survive it has 11 tracks.

Happiness by Dance Gavin Dance .
(xenial)vash@localhost:~/pcc/8$
You should put all code that isn't in a function in a if __name__ == '__main__' guard. So that it doesn't run when it shouldn't.
You can simplify quitting by using exceptions. If you make a function that raises say KeyboardInterupt if the input is 'q' then you can reduce the amount of code needed.
I like to not use variables when they're not needed, or increase readability, and so you may want to move riven straight into the creation of differents.
You can use f-strings or str.format to build your prints for you: 

&gt;&gt;&gt; i = {'title': 'title', 'album': 'album'}
&gt;&gt;&gt; i['title'] + ' by ' + i['album']
'title by album'
&gt;&gt;&gt; "{i[title]} by {i[album]}".format(i=i)
'title by album'
# Python 3.6+
&gt;&gt;&gt; f"{i['title']} by {i['album']}"
'title by album'

You can simplify make_album by using dictionary sugar:

def make_album(artist, album, tracks =''):
    return {
        'artist_name': artist,
        'album_title': album,
        'tracks': tracks
    }

You can alturnatly use collections.namedtuple:

# Python 3.7
Album = collections.namedtuple('Album', 'artist album tracks', defaults=('',))

# Otherwise
Album = collections.namedtuple('Album', 'artist album tracks')


def make_album(artist, album, tracks=''):
    return Album(artist, album, tracks)

I'd create a couple more functions. But honestly your code is pretty great. Half my suggestions I wouldn't expect a beginner to use.




import collections

Album = collections.namedtuple('Album', 'artist album tracks', defaults=('',))


def ask_user(message):
    user_input = None
    while not user_input:
        user_input = input(message)
    return user_input


def check_quit(user_input):
    if user_input == 'q':
        raise KeyboardInterupt()
    return user_input


def get_additional_albums():
    albums = []
    try:
        print("type q to quit")
        while True:
            albums.append(Album(
                cheack_quit(ask_user("Enter artist: ")).title(),
                cheack_quit(ask_user("Enter album: ")).title(),
                cheack_quit(input("Enter number of tracks: "))
            ))
    except KeyboardInterupt:
        pass
    return albums


if __name__ == '__main__':
    differents = [
        Album('Zeppelin', 'Houses of the Holy', 8),
        Album('Tool', 'Lateralus', 13),
        Album('Pink Floyd', 'Dark Side of the Moon')
    ]
    differents += get_additional_albums()

    for i in differents:
        output = f'{i.title} by {i.album}'
        if i.tracks:
            output = f'{output} it has {i.tracks} tracks'
        print(f'\n{output}.')