First attempt: Python Rock Paper Scissors I finished Python Principles and this is my first program I've done (mostly) from scratch since, having to get some outside help on the loop to repeat the program, and I saw a nifty thing about using modular math to figure out the results so I did that to save a bunch of lines.

I'm just looking for any comments, improvements, bad habits, any comments at all!

import random
options = ['rock', 'paper', 'scissors']

def pickRando(): #set random choice for CPU
        global randoPick
        randoPick = random.choice(options)

def game(): #start up the game
    global player
    print('Rock, Paper, Scissors:')
    player = input("Choose wisely: ") #get player input
    player = player.lower()
    if player in options:
        check = True
        print("Okay, you picked " + player + ' and I picked ' + randoPick + '!')
        return check
    else:
        print('You have not chosen a viable option! Try again')
        check = False
        return check

def convertible(swap): #changing the word into a number
    if swap == 'rock':
        swap = 0
    elif swap == 'paper':
        swap = 1
    else:
        swap = 2
    return swap

def combatCheck(a, b): #determine the results of the choices
    a = convertible(a)
    b = convertible(b)
    result = (a - b) % 3 #modmath
    return result

def finish(z): # report the results
    global wins
    global losses
    global ties
    if z == 0:
        print('A tie! You are a most worthy opponent! Go again?')
        ties = ties + 1
    if z == 1:
        print('You win! My honor demands a rematch!')
        wins = wins + 1
    if z == 2:
        print('Haha, I am victorious! Dare you challenge me again?')
        losses = losses + 1
    print('You have ' + str(wins) + ' wins, ' + str(losses) + ' losses and, ' + str(ties) + ' ties!')

wins = 0
losses = 0
ties = 0

while True :
    pickRando()
    check = False
    while check == False:
        check = game()
    finish(combatCheck(player, randoPick))
    while True: #looping
        global answer
        answer = input('Run again? (y/n): ')
        if answer in ('y', 'n'):
            break
            print('Invalid input.')
    if answer == 'y':
        continue
    else:
        print('You are weak!')
        break
This code reads like beginner code. Good beginner code, but there are a few habits you're getting into that are systemic among beginners and will screw you over later down the line.

First, your function names are somewhat confusing. I would rename pickRando to computerChoice, combatCheck to game, and finish to something like printRecord. Once you do that, you shouldn't need the comments describing them. Comments are good, but shouldn't be used in lieu of descriptive names.

Second, avoid global variables. It will cause confusing issues later down the line, so please get into the habit of not using them. In order to avoid the global variables wins, losses, and ties, you would need to restructure a lot of code and it may not be worth it for this small of a code base. Exercise to the reader, I guess. But the other globals can easily be removed. I would change pickRando to

def computerChoice():
    return random.choice(options)


The concept behind the input check is good, but I would heavily modify the structure. Here's a better way to do that

while True:
    [...]
    print("Rock, Paper, Scissors:")

    playerChoice = input('choose wisely')
    while  not playerChoice in options:
        print "invalid input"
        playerChoice == input('choose wisely')
    print("Okay, you picked " + playerChoice + ' and I picked ' + computerChoice + '!')


This restructuring should make what it's actually doing clearer.

Next: the convertible method is a very good solution if you don't know about the built-in method index. You can change the combatCheck method to something like this.

a = options.index(a)
b = options.index(b)
return (a-b) % 3


I would also comment the last line with something more descriptive than modmath. I might say something like uses modular arithmetic to calculate results.

I like that you put combatCheck in its own function from the perspective of the teacher, because it shows that you use functions, but I think it's unnecessary here, because you only use that bit of code once and it's only a few lines.

You definitely have some really great foundations. Most of your mistakes are mistakes I made in my early days of Python, and I like to think I'm a pretty OK programmer. I think with practice and time, you'll turn into an amazing programmer.