Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from functools import lru_cache
- @lru_cache(maxsize=1000)
- def fibonacci(n):
- if n == 1 or n == 0:
- return 1
- if n == 2:
- return 2
- if n > 2:
- return (fibonacci(n-1) + fibonacci(n-2))
- def ordinal(n):
- return "%d%s" % (
- n,
- "tsnrhtdd"[(n / 10 % 10 != 1) * (n % 10 < 4) * n % 10 :: 4],
- )
- while True:
- try:
- while True:
- try:
- n = int(input("Pick your Fibonacci number: "))
- if type(n) == int:
- break
- except Exception:
- print("It must be a positive integer")
- if n < 1:
- raise ValueError("It must be a positive integer")
- else:
- while True:
- try:
- q = input("Series? [y/n] ")
- if q == "y" or q == "n":
- break
- print("Your answer must be 'y' or 'n'")
- except:
- raise TypeError("Your answer must be 'y' or 'n'")
- if q == "y":
- try:
- for n in range(1,n+1):
- print(n, ":", fibonacci(n-1))
- except RecursionError:
- print("Your computer doesn't have the capacity for such calculations!")
- elif q == "n":
- print(f"The {ordinal(n)} Fibonacci number is {fibonacci(n-1)}.")
- else:
- raise ValueError("answer must be y or n")
- except RecursionError:
- print("Your computer doesn't have the capacity for such calculations!")
- quit = input("Another one? [y/n] ")
- if quit != "y" and q != "n":
- print("Your answer must be 'y' or 'n'")
- elif quit == "y":
- continue
- else:
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement