你需要判断x2是否在列表x1,用if
if x2 in x1:
你写的相等于for循环,变量是x2,循环次数是x1
你要的情况直接输出就行,不用循环
x2=9
x1=range(90)
print("你的座位号是: "+str(x2))
你在下面for里重新定义了x2,前面x2=9被覆盖掉了
有帮助望采纳
先说结论:
在本例中for 循环中修改了全局变量x2的值,修改的值就是range函数返回的迭代对象中的值。
主要涉及两个方面,一是for循环的使用,二是变量作用域的问题。
一、python的for循环
(1)range函数
range() 函数返回一个可迭代对象(注意类型是对象)
用法:
range(start, stop[, step]),分别是起始、终止和步长,其中start默认为0,step默认为1。
for i in range(5): #使用range的迭代对象循环对i进行赋值
print(i)
i = 3 # 在这里i=3不起作用,因为下一次for循环会被重新赋值
另外循环完成时,目标列表中的名称不会被删除,但如果序列为空,则循环根本不会为其分配名称。像下面这样:
for i in range(5):
print(i)
print(i) #i=4,因为for循环结束后i也不会删除
二、python中的作用域
Python 的作用域遵循一个叫做LEGB的法则。
当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:
本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)
使用 class, def, lambda 会引入一个本地作用域(Local),而且本地作用域是可以嵌套的。内层的变量会屏蔽外层,内层找不到的变量会去外层找
全局作用域(Global)就是模块内的作用域,他的作用范围是单一文件内。
内置函数的作用域就是int(), list()之类的内置函数。
[参考]
但是在python中无论是for循环还是while循环,它们都不是函数,不会引入新的作用域。
所以for循环中的循环变量 i 的作用域其实和for循环同级,在你的代码中for循环中的变量 x2 依然是全局变量,并且依然可以修改循环体之外的变量。
在例子中:
x2=9
for x2 in range(90):# 为 x2 重新赋值
print(x2) #x2的作用域就是全局作用域,因为for不会引入新的作用域
print(x2) #x2=89,因为for循环语句中修改了全局变量的值
如果像下面这样写会有如下的输出:
i=80
print(i) #i=80(全局作用域)
def foo1():#本地作用域
print("foo1:")
for i in range(5):#本地作用域
print(i)#i从0到4
print(i)#i=4
def foo2():#本地作用域
print("foo2:")
print(i)#i=80(搜索本地作用域没有 i 的定义,会去搜索foo2函数的外层),注意如果要修改 i 的值需要使用global关键字修饰
foo1()
foo2()
输出结果为
80
foo1:
0
1
2
3
4
4
foo2:
80
最后,如果你想输出9-89,可以使用
for x2 in range(9,90)
print(x2)
如果想修改全局变量可以在在函数中使用global关键词
x2=9
def foo1():
global x2
for n in range(3):
i+=1
print(i)
foo1()
输出结果:
10
11
12