斐波那契数列之小兔子
# p6_7_1.pydef 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 对小兔子!
请输入月数:
…… 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时,程序会输出“输入错误!”,在输入正整数时,会计算出对应的斐波那契数列值,并输出结果。当用户输入为空时,循环会结束,程序退出。 歌者文明清理员 发表于 2023-6-18 00:24
1、这个代码实现的是一个简单的斐波那契数列函数。它的思路是通过两个变量a和b来计算斐波那契数列的值,初 ...
感谢指点,
1、用if len(s) == 0是为了判断用户输入是否为空?
2、我是想实现:当提示用户输入月数时,
若用户输入<=0,提示用户输入错误,同时换行再次提示用户输入月数
若用户输入 >0, 则输出结果,同时换行再次提示用户输入月数
不知大神是否理解我的意思? 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]