Rock Paper Scissors with score count
The result function can be much shorter:

def result(user_choice, cpu_choice):
    game_result = (3 + user_choice - cpu_choice) % 3
    user_score = (0.5, 1.0, 0.0)[game_result]
    return (user_score, 1.0 - user_score)


I changed the following things:


Since the result of a single game does not depend on the previous results, it is easier to only compute a single result.
The result of a game can be computed by taking the difference of the choices.
The 3 + prevents the difference from getting negative. This is done because different programming languages choose to produce different results for the expression -2 % 3. Adding 3 prevents that.
game_result is now either 0, 1 or 2
This can be used in a small lookup table to produce the correct user_score.
Since user_score + cpu_score == 1.0 for a single game, there's no need to do the complicated calculation twice.
Returning a tuple (1.0, 0.0) instead of a list [1.0, 0.0] is more appropriate, since lists can change their size. This return value has always size 2, since there are only 2 players.


The code is a little trickier to understand, but it works. And it is more concise.

def choice_to_string(choice):
    return ('rock', 'paper', 'scissors')[choice - 1]


With that function, you can write:

print("{0} chose {1}".format('The player', choice_to_string(2))


The rest of the code is fine, except for the variable names. You are using way too many synonyms.


computer, cpu, ai all mean the same. Choose one of them and only use that.
human, user, player all mean the same. Choose one of them and only use that.


Writing technical documents and code is very different from writing a novel. In a novel, using different terms for the same thing is generally accepted, in code it is not.

Instead of asking the user alternatingly to type "1 to 3" and "0 or anything else" is too much of a burden. You can combine these into "type 1 to 3 to play, or 0 to quit". This allows a game to be played with 2 key strokes instead of 4.