Fibonacci sequence output
Separate responsibilities
Your functions should, where possible, limit themselves to doing one thing only. This is the  single-responsibility principle. In case of fibonacci(), I expect this function to just calculate the desired Fibonacci number, and not deal with user input and output. This shortens the function and makes it easier to reason about. So:
def fibonacci(terms):
    count = 0
    x = 0
    y = 1
    z = x + y

    while count &lt; terms:
        yield x
        z = x + y
        x = y
        y = z
        count += 1

Instead of printing the values, it yields them. To print the values, use the following:
terms = int(input(&quot;How many terms? &quot;))
for number in fibonacci(terms):
    print(number)

You can even go futher and make fibonacci() an infinite generator, and leave it up to the caller to decide when to stop:
import itertools

def fibonacci():
    x = 0
    y = 1

    while True:
        yield x
        z = x + y
        x = y
        y = z

terms = int(input(&quot;How many terms? &quot;))
for number in itertools.islice(fibonacci(), terms):
    print(number)

Here I used itertools.islice() to take only the first terms items from the generator.
If you want to handle invalid input gracefully, I suggest you write another function whose responsibility is asking the user for a postivive integer:
def get_positive_integer(prompt):
    while True:
        user_input = int(input(prompt))
        if ...:            
            return user_input
        print(&quot;Enter a positive integer.&quot;)

Avoid using os.system()
Using os.system() to clear the screen is very inefficient and not portable. Of course it is prettier to clear the screen, but if it is not really important for your program, I would just not do it; portability is more important.