## 1.为了避免unboundLocalError
发生unboundLocalError!
def generate_integer(level):if level == 1:X = randint(1,9)return X这里出错的原因在于,一旦if 后面的条件没有成立,然后X根本没出生,然后你去使用它,这是有问题的
(这是搜到的例子)
1.第一个解决的办法:就是在def里面无条件的赋值,也是最简单的
2.使用场景,你需要修改def外面的全局变量,应该要在def里面global一下,不然改不了
3.使用场景,多个def 函数,需要在内部def 里面使用nonlocal关键词一下,才可以修改外部def里面的变量
2. 一些容易误解的概念
1.全局初始化 和 无条件赋值的区别:
这里问X没有全局初始化?X在函数中没有无条件赋值?
不是一个概念。
简:
全局初始化:def外面的无条件赋值
函数中无条件赋值:def里面的无条件赋值
2.python 和 C语言 作用域的区别:
简:
python:只有def或者class可以生小孩(变量)。
没有语句块,例如if else ,match…case等等
C语言:所有人(block,只要是带花括号的{})都可以生小孩(变量)
共性:自己生的小孩(变量),在自己肚子里和身边活动(作用域)
3. 为什么X的值一直不变呢?
确实(if 的条件不成立)不一样,所以一直不变
细心的盆友会发现,我们 input的东西是一个 str,不是数字,
这就是为什么一直X的值没有任何变化
from random import randint
def generate_integer(level):X = 10if level == 1:X = randint(1,9)return X
def get_level():level = input("Level: ")my_list = [1,2,3]while True:if not level.isdigit():level = input("Level: ")elif int(level) not in my_list:level = input("Level:")else:return level
level = get_level()
answer = generate_integer(level)
print(level)
print(answer)
修改:
level = int(get_level())