创建循环检查变量是否为正整数
我正在尝试创建一个程序,用来生成前n个斐波那契数的列表。这个程序本身是可以工作的,它能够生成斐波那契数列。但是,我想让它检查一下n是否是一个正整数,但我不知道该怎么做。
以下是代码:
n = int(input("Please enter the number of Fibonacci numbers you want: "))
def fib(n):
if 0 <= n <= 1:
return 1
else:
return(fib(n-1) + fib(n-2))
if n < 0:
print("Please enter a positive integer")
n = None
fib(n)
else:
for i in range(n):
print(fib(i), end=", ")
ender = input("\nPress enter to end the program\n")
- 首先,它会要求用户输入一个n,这个n应该是一个整数。
- 然后程序定义了一个函数fib(n)。
- 接着,它检查n是否等于1或0,如果是,就返回值1。
- 如果不是,它就会根据n的值计算斐波那契数列。
- 然后会进行一个检查,如果n小于0,就打印出错误信息,并且去掉n的值。
- 问题在于,它无法循环回去替换n的值,因为那样会导致无限循环,而且我不能在fib(n)函数内部定义n的整数值。
- else语句只是格式化输出,把斐波那契数以逗号和空格分隔的方式打印出来,并且让程序保持运行,不会自动结束。
我该如何创建一个循环,去掉负数的n并重新询问用户呢?
非常感谢!
5 个回答
-1
你可以使用一个布尔变量,也就是一个可以是“真”或“假”的变量。你可以一直循环,直到输入一个正数为止。在这种情况下,你把这个变量的值设为 False
。
def fib(n):
if 0 == n and n == 1:
return 1
else:
return(fib(n-1) + fib(n-2))
isTrue= True
while isTrue:
n = int(input("Please enter the number of Fibonacci numbers you want: "))
if n < 0:
print("Please enter a positive integer")
else:
isTrue= False
for i in range(n):
print(fib(i), end=", ")
ender = input("\nPress enter to end the program\n")
0
处理这个问题的一个好方法是这样:
n = int(input("Please enter the number of Fibonacci numbers you want: "))
while n < 0:
n = int(input("Bad input! try again: "))
*** do your other things ***
这样的话,它会不断检查,直到你输入的内容是正确的。
0
你可以在代码的开头设置一个while循环:
n = -1
while n <= 0:
n = int(input("Please enter the number of Fibonacci numbers you want: "))
1
把 n
设置为 -1,然后用一个循环来不断询问新的 n
,只要当前的 n
还是负数,就继续问下去。
1
让我来稍微详细解释一下其他人给你的回答:
n = -1
while n < 0:
try:
n = int(input("Please enter the number of Fibonacci numbers you want: "))
except ValueError:
continue
这个代码会处理那些试图偷偷输入像 HELLO
这样的值,而不是 5
的用户。