鱼C论坛

 找回密码
 立即注册
查看: 1524|回复: 12

[已解决]斐波那他数列,全局变量

[复制链接]
发表于 2020-3-9 09:48:26 | 显示全部楼层 |阅读模式

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

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

x
在斐波那他数列中,如果输入负值会提示错误重新输入,这就导致变量改变,于是想用全局变量表示,但是无法定义是什么原因:
以下代码有问题,因为全局变量定义不了,
num= int(input("please input a number: "))
def Fibonacca(num):
    global num
    while num < 1:
        print("sorry, please input another int number")
        num= int(input("the int number: "))
    if num == 1 or num == 2:
        return 1
    else:
        return Fribonat (num -1) + Fribonat ( num -2)
temp = Fibonacca(num)
print("%d 的斐波那他数列的值是 %d" % (num, temp))
我不想把while循环拿出来,如果改的话怎么改,求大佬帮助!
最佳答案
2020-3-9 10:29:21
        全局变量 num 毫无必要
#-*-coding:gbk-*-

def Fibonacca(num):
    b = 0
    if num > 0:
        a , b = 1 , 1
        for x in range(3 , num + 1):
            a , b = b , a + b
    return b

while True:
    num = int(input("请输入一个整数: "))
    if num > 0:
        break
    else:
        print("抱歉,请输入一个正整数!\n")
print("%d 的斐波那他数列的值是 %d" % (num , Fibonacca(num)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-9 09:55:16 | 显示全部楼层
一个函数只做一件事:
def Fibonacca(num):
    if num == 1 or num == 2:
        return 1
    else:
        return Fibonacca (num - 1) + Fibonacca(num - 2)
    
num= int(input("please input a number: "))
while True:
    if num < 0:
        num = int(input("输入错误!请重新输入:"))
    else:
        break
temp = Fibonacca(num)
print("%d 的斐波那他数列的值是 %d" % (num, temp))
P.S:你这定义的函数名和调用的函数名不一样啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 09:56:04 | 显示全部楼层
把你的global改成nonlacal试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 09:57:32 | 显示全部楼层
qiuyouzhi 发表于 2020-3-9 09:55
一个函数只做一件事:

P.S:你这定义的函数名和调用的函数名不一样啊。。。

也有这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 09:58:34 | 显示全部楼层
wuqramy 发表于 2020-3-9 09:56
把你的global改成nonlacal试试

nonlocal是闭包用的吧
这里也没有闭包啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 10:02:53 | 显示全部楼层
qiuyouzhi 发表于 2020-3-9 09:58
nonlocal是闭包用的吧
这里也没有闭包啊


???
我的笔记清清楚楚地写着:
需要在局部函数中修改使用全局变量用nonlocal

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 10:04:19 | 显示全部楼层
wuqramy 发表于 2020-3-9 10:02
???
我的笔记清清楚楚地写着:

是用 global ……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 10:04:35 | 显示全部楼层
wuqramy 发表于 2020-3-9 09:56
把你的global改成nonlacal试试

不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 10:05:13 | 显示全部楼层
qiuyouzhi 发表于 2020-3-9 09:55
一个函数只做一件事:

P.S:你这定义的函数名和调用的函数名不一样啊。。。

中间调过函数名,忘了全改了,我不想把while拿出来啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 10:05:27 | 显示全部楼层
zltzlt 发表于 2020-3-9 10:04
是用 global ……

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 10:29:21 | 显示全部楼层    本楼为最佳答案   
        全局变量 num 毫无必要
#-*-coding:gbk-*-

def Fibonacca(num):
    b = 0
    if num > 0:
        a , b = 1 , 1
        for x in range(3 , num + 1):
            a , b = b , a + b
    return b

while True:
    num = int(input("请输入一个整数: "))
    if num > 0:
        break
    else:
        print("抱歉,请输入一个正整数!\n")
print("%d 的斐波那他数列的值是 %d" % (num , Fibonacca(num)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 10:45:34 | 显示全部楼层
jackz007 发表于 2020-3-9 10:29
全局变量 num 毫无必要

我不想拿while拿出来,所以问问有没有方法可以把实参直接在函数里边改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 10:50:02 | 显示全部楼层
Chysial 发表于 2020-3-9 10:45
我不想拿while拿出来,所以问问有没有方法可以把实参直接在函数里边改


        Python 函数的实参是属于本函数的局部变量,所以,对该变量的修改有效范围也仅限于本函数内部,不可能传递出函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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