创建循环检查变量是否为正整数

0 投票
5 回答
3437 浏览
提问于 2025-05-01 17:00

我正在尝试创建一个程序,用来生成前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 的用户。

撰写回答