lzb1001 发表于 2023-6-18 00:18:57

斐波那契数列之小兔子

# p6_7_1.py

def fab(n):
    b = 0 # 为何需要这个定义?为何不是a?其他值不可以?
    if n > 0:
      a, b = 1, 1
      for x in range(2, n):
            a, b = b, a + b
    return b



while True:
    s = input('请输入月数:').strip() # 字符串.strip()表示删除字符串前边和后边所有的空格
    #if int(s) <= 0:
      #print('输入错误!')
    #if int(s) > 0:
      #print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
    #else:
      #break
    if len(s) > 0 :
      print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
    else:
      break

我的疑问:

1、为什么会想到用这种方式?或者说这种方式是利用什么思路?

2、如果我想实现以下效果,代码应如何写?

请输入月数:0
输入错误!

请输入月数:20
20 个月总共有 6575 对小兔子!

请输入月数:
……

歌者文明清理员 发表于 2023-6-18 00:24:11

1、这个代码实现的是一个简单的斐波那契数列函数。它的思路是通过两个变量a和b来计算斐波那契数列的值,初始值分别为1和1,每次循环更新a和b的值,最后返回b的值,即为计算的结果。在输入月数的while循环中,利用了input()函数获取用户的输入,并使用字符串的strip()方法删除输入中的空白字符,以防止用户误输入导致程序出错。

2、想要实现输入值为0时报错的功能,可以将代码中被注释掉的if语句取消注释,并在其中添加对输入值的判断。同时,可以使用一个无限循环(while True)来不断获取用户输入,直到用户输入为空时退出循环。修改后的代码如下:

def fab(n):
    b = 0
    if n > 0:
      a, b = 1, 1
      for x in range(2, n):
            a, b = b, a + b
    return b

while True:
    s = input('请输入月数:').strip()
    if len(s) == 0:
      break
    elif int(s) <= 0:
      print('输入错误!')
    else:
      print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
这样,在用户输入0时,程序会输出“输入错误!”,在输入正整数时,会计算出对应的斐波那契数列值,并输出结果。当用户输入为空时,循环会结束,程序退出。

lzb1001 发表于 2023-6-18 01:11:14

歌者文明清理员 发表于 2023-6-18 00:24
1、这个代码实现的是一个简单的斐波那契数列函数。它的思路是通过两个变量a和b来计算斐波那契数列的值,初 ...

感谢指点,

1、用if len(s) == 0是为了判断用户输入是否为空?

2、我是想实现:当提示用户输入月数时,
若用户输入<=0,提示用户输入错误,同时换行再次提示用户输入月数
若用户输入 >0, 则输出结果,同时换行再次提示用户输入月数
不知大神是否理解我的意思?

歌者文明清理员 发表于 2023-6-18 01:34:26

lzb1001 发表于 2023-6-18 01:11
感谢指点,

1、用if len(s) == 0是为了判断用户输入是否为空?


1、是的,使用if len(s) == 0可以判断用户输入是否为空。如果用户没有输入或输入了空白字符,那么经过strip()处理后,s字符串的长度就会变为0,因此可以利用len()函数判断。

2、根据您的意思,可以将代码做如下修改:

def fab(n):
    b = 0
    if n > 0:
      a, b = 1, 1
      for x in range(2, n):
            a, b = b, a + b
    return b

while True:
    s = input('请输入月数:').strip()
    if len(s) == 0:
      continue
    elif int(s) <= 0:
      print('输入错误!')
    else:
      print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
    print() # 换行
在这个代码中,当用户输入为空时,使用continue语句跳过本次循环,继续等待用户输入。当用户输入小于等于0时,输出“输入错误!”并换行;当用户输入大于0时,计算出对应的斐波那契数列值,并输出结果,然后再换行。无论输入是否正确,都会在最后进行一次换行,以使提示信息和下一次输入分隔开来。
页: [1]
查看完整版本: 斐波那契数列之小兔子