如何在python中生成n次函数并计算数字?
How to generate function n times in python and count digits?
我想根据用户输入生成 N 次斐波那契函数。 (我认为这是一个 while 循环或一个 if 语句,如 if N in range)。
还有第二个用户输入定义为 Y。Y 表示重复函数的位数,我想计算生成的数字有多少个 Y 位数。
下面是我的不完整代码:
N = int(input("Enter N: "))
Y = int(input("Enter Y: "))
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-2) + fibonacci(n-1)
nterms = 10
# check if the number of terms is valid
if nterms <= 0:
print("Please enter a positive integer")
else:
print("Fibonacci sequence:")
for i in range(nterms):
print(fibonacci(i))
提前致谢
试试这个(阅读下面代码中的注释):
from math import sqrt
def fibonacci(n):
return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) # WA algorithm
# Handle N from user input
while True:
N = int(input("Enter N: "))
Y = int(input("Enter Y: "))
if N < 1 or Y < 1:
print("Plese enter a positive integers for N and Y")
else:
break
count = 0 # Counter of the instances of fibonacci numbers containing Y digits
for n in range(N):
fib = fibonacci(n) # Calls fibonacci
print(fib) # Print Fibonacci number
if len(str(fib)) == Y: # Number of digits in the Fibonacci number
count += 1 # Count up if number of digits = Y
print("\nFibonacci numbers with {} digits occured {} times" .format(Y, count))
计算斐波那契数列的算法来自Wolfram Alpha
编辑:
为了节省查找多个 Y
的结果的时间,您可以像这样在字典中保存统计信息:
from math import sqrt
# Handle N from user input
while True:
N = int(input("Enter N: "))
if N < 1:
print("Plese enter a positive integers for N and Y")
else:
break
size = {} # Dictionary with number of occurences of lengths of Fibonacci numbers
count = 0 # Counter of the instances of fibonacci numbers containing Y digits
for n in range(N):
fib = int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) # WA algorithm
print(fib) # Print Fibonacci number
s = str(len(str(fib)))
if s not in size:
size[s] = 1
else:
size[s] += 1
print()
for key, val in size.items():
print("{}\toccured\t{} times" .format(key, val))
这将产生如下输出:
Enter N: 13
0
1
1
2
3
5
8
13
21
34
55
89
144
1 occured 7 times
2 occured 5 times
3 occured 1 times
我想根据用户输入生成 N 次斐波那契函数。 (我认为这是一个 while 循环或一个 if 语句,如 if N in range)。 还有第二个用户输入定义为 Y。Y 表示重复函数的位数,我想计算生成的数字有多少个 Y 位数。
下面是我的不完整代码:
N = int(input("Enter N: "))
Y = int(input("Enter Y: "))
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-2) + fibonacci(n-1)
nterms = 10
# check if the number of terms is valid
if nterms <= 0:
print("Please enter a positive integer")
else:
print("Fibonacci sequence:")
for i in range(nterms):
print(fibonacci(i))
提前致谢
试试这个(阅读下面代码中的注释):
from math import sqrt
def fibonacci(n):
return int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) # WA algorithm
# Handle N from user input
while True:
N = int(input("Enter N: "))
Y = int(input("Enter Y: "))
if N < 1 or Y < 1:
print("Plese enter a positive integers for N and Y")
else:
break
count = 0 # Counter of the instances of fibonacci numbers containing Y digits
for n in range(N):
fib = fibonacci(n) # Calls fibonacci
print(fib) # Print Fibonacci number
if len(str(fib)) == Y: # Number of digits in the Fibonacci number
count += 1 # Count up if number of digits = Y
print("\nFibonacci numbers with {} digits occured {} times" .format(Y, count))
计算斐波那契数列的算法来自Wolfram Alpha
编辑:
为了节省查找多个 Y
的结果的时间,您可以像这样在字典中保存统计信息:
from math import sqrt
# Handle N from user input
while True:
N = int(input("Enter N: "))
if N < 1:
print("Plese enter a positive integers for N and Y")
else:
break
size = {} # Dictionary with number of occurences of lengths of Fibonacci numbers
count = 0 # Counter of the instances of fibonacci numbers containing Y digits
for n in range(N):
fib = int(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))) # WA algorithm
print(fib) # Print Fibonacci number
s = str(len(str(fib)))
if s not in size:
size[s] = 1
else:
size[s] += 1
print()
for key, val in size.items():
print("{}\toccured\t{} times" .format(key, val))
这将产生如下输出:
Enter N: 13
0
1
1
2
3
5
8
13
21
34
55
89
144
1 occured 7 times
2 occured 5 times
3 occured 1 times