鱼C论坛

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

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

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

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

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

x
在斐波那他数列中,如果输入负值会提示错误重新输入,这就导致变量改变,于是想用全局变量表示,但是无法定义是什么原因:
以下代码有问题,因为全局变量定义不了,
  1. num= int(input("please input a number: "))
  2. def Fibonacca(num):
  3.     [color=Red]global num[/color]
  4.     while num < 1:
  5.         print("sorry, please input another int number")
  6.         num= int(input("the int number: "))
  7.     if num == 1 or num == 2:
  8.         return 1
  9.     else:
  10.         return Fribonat (num -1) + Fribonat ( num -2)
  11. temp = Fibonacca(num)
  12. print("%d 的斐波那他数列的值是 %d" % (num, temp))
复制代码

我不想把while循环拿出来,如果改的话怎么改,求大佬帮助!
最佳答案
2020-3-9 10:29:21
        全局变量 num 毫无必要
  1. #-*-coding:gbk-*-

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

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

使用道具 举报

发表于 2020-3-9 09:55:16 | 显示全部楼层
一个函数只做一件事:
  1. def Fibonacca(num):
  2.     if num == 1 or num == 2:
  3.         return 1
  4.     else:
  5.         return Fibonacca (num - 1) + Fibonacca(num - 2)
  6.    
  7. num= int(input("please input a number: "))
  8. while True:
  9.     if num < 0:
  10.         num = int(input("输入错误!请重新输入:"))
  11.     else:
  12.         break
  13. temp = Fibonacca(num)
  14. 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 毫无必要
  1. #-*-coding:gbk-*-

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

  9. while True:
  10.     num = int(input("请输入一个整数: "))
  11.     if num > 0:
  12.         break
  13.     else:
  14.         print("抱歉,请输入一个正整数!\n")
  15. 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-6-2 09:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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