鱼C论坛

 找回密码
 立即注册
查看: 1294|回复: 3

[已解决]斐波那契数列之小兔子

[复制链接]
发表于 2023-6-18 00:18:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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 01:34:26
lzb1001 发表于 2023-6-18 01:11
感谢指点,

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

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

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

  1. def fab(n):
  2.     b = 0
  3.     if n > 0:
  4.         a, b = 1, 1
  5.         for x in range(2, n):
  6.             a, b = b, a + b
  7.     return b

  8. while True:
  9.     s = input('请输入月数:').strip()
  10.     if len(s) == 0:
  11.         continue
  12.     elif int(s) <= 0:
  13.         print('输入错误!')
  14.     else:
  15.         print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
  16.     print() # 换行
复制代码

在这个代码中,当用户输入为空时,使用continue语句跳过本次循环,继续等待用户输入。当用户输入小于等于0时,输出“输入错误!”并换行;当用户输入大于0时,计算出对应的斐波那契数列值,并输出结果,然后再换行。无论输入是否正确,都会在最后进行一次换行,以使提示信息和下一次输入分隔开来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

  1. def fab(n):
  2.     b = 0
  3.     if n > 0:
  4.         a, b = 1, 1
  5.         for x in range(2, n):
  6.             a, b = b, a + b
  7.     return b

  8. while True:
  9.     s = input('请输入月数:').strip()
  10.     if len(s) == 0:
  11.         break
  12.     elif int(s) <= 0:
  13.         print('输入错误!')
  14.     else:
  15.         print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
复制代码

这样,在用户输入0时,程序会输出“输入错误!”,在输入正整数时,会计算出对应的斐波那契数列值,并输出结果。当用户输入为空时,循环会结束,程序退出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢指点,

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

2、我是想实现:当提示用户输入月数时,
若用户输入<=0,提示用户输入错误,同时换行再次提示用户输入月数
若用户输入 >0, 则输出结果,同时换行再次提示用户输入月数
不知大神是否理解我的意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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、根据您的意思,可以将代码做如下修改:

  1. def fab(n):
  2.     b = 0
  3.     if n > 0:
  4.         a, b = 1, 1
  5.         for x in range(2, n):
  6.             a, b = b, a + b
  7.     return b

  8. while True:
  9.     s = input('请输入月数:').strip()
  10.     if len(s) == 0:
  11.         continue
  12.     elif int(s) <= 0:
  13.         print('输入错误!')
  14.     else:
  15.         print(f' {s} 个月总共有 {fab(int(s))} 对小兔子!', '\n')
  16.     print() # 换行
复制代码

在这个代码中,当用户输入为空时,使用continue语句跳过本次循环,继续等待用户输入。当用户输入小于等于0时,输出“输入错误!”并换行;当用户输入大于0时,计算出对应的斐波那契数列值,并输出结果,然后再换行。无论输入是否正确,都会在最后进行一次换行,以使提示信息和下一次输入分隔开来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表