Random number generator [Beginner]
First, an issue with behaviour: In guess_number you don't make sure the input from the user is a number at all. So you might end up calling int(&quot;oops&quot;). This raises a ValueError, and since there's nothing to catch that, the program crashes. You'll want to do something about that. A simple solution could be
try:
    guess = int(input(...))
    if guess == random_number:
        ...
    else
        ...
except ValueError:
    print(&quot;That doesn't look like a number to me, but that's OK, I'll count it anyway :)&quot;)
    guess_count += 1

Side note, guesses that aren't in the interval also add to the counter. That might be on purpose, but since the validity of the input wasn't checked at all I don't want to assume, so I'm pointing it out.
There are also a couple minor issues with intro
First off, you're duplicating the num_range = input() line. If you get the input at the start of the loop (before the if) instead it'll be easier to change if for some reason you need to
Second, in python the usual approach is that it's better to ask for forgiveness than permission. That if check would usually be written using a try/except KeyError block (a bit like above). But if you don't want to do that, a more robust approach than the current one could be to check if num_range in num_guesses, in case a new option is added, or the program changes from accepting 1 and 2 to accepting &quot;a&quot; and &quot;b&quot;.
On a related third note, the messages don't actually know what options are available, so there's a risk they get out of sync with the rest of the program. You can get a list of valid options as num_guesses.keys(), or use a for loop to iterate over the keys in num_guesses directly
Finally, I don't love the variable names. num_guesses sounds like it should be the number of guesses, but it isn't a number at all. Similarly, num_range doesn't have much to do with ranges of numbers either. num_range feels like it would be better described by a name like selection or choice, and num_guesses is a collection of available options, so maybe it could be called options?
options = {
    &quot;1&quot;: (5, 50),
    &quot;2&quot;: (10, 100)
}

print(&quot;Welcome to ... on the range you choose.&quot;)

for option in options:
    print(f&quot;From 0 - {options[option][1]}, you'll get {options[option][0]} chances.&quot;)

while True:
    print(&quot;Choose a range:&quot;)
    for option in options:
        print(f&quot;{option}. 0 - {options[option][1]}&quot;)

    selection = input()
    try:
        return options[selection]
    except KeyError:
        print(f&quot;{selection} is not a valid selection.&quot;)