一、变量的作用域
一个程序中的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。最常见的两种作用域为:
局部作用域:局部变量的作用域为局部作用域
全局作用域:全局变量的作用域为全局作用域
二、局部变量
局部变量,就是在函数内部定义的变量;
不同的函数,可以定义相同的名字的局部变量,但是不会互相产生影响。
eg:
# 局部变量:声明在函数内部的变量。
def test1():
a=1
print(a)
print(id(a))
def test2():
print(a) #a未定义,无法调用
test1()
test2()
print(a) #局部变量的作用域仅在函数内部,外部无法使用
三、全局变量
全局变量是声明在函数外部的变量,定义在函数外的拥有全局作用域。
eg:
#全局变量:作用域在全局,同一个文件内可使用
def test1():
a=1
print(a)
print(id(a))
def test2():
print(a)
print(id(a))
a=2
test1()
test2()
print(a)
四、修改全局变量
要想在函数内部修改全局变量需要使用grobal关键字声明。
eg:
'''
修改全局变量
'''
a=2
def test1():
global a #声明全局变量
a=1
print(a)
print(id(a))
def test2():
print(a)
print(id(a))
test1()
test2()
练习1:
定义一个函数,实现两个数四则运算,要注意有3个参数,分别是运算符和两个用于运算的数字。
两个数字和运算符需要接收用户输入的值。
'''
练习1:
定义一个函数,实现两个数四则运算,要注意有3个参数,分别是运算符和两个用于运算的数字。
两个数字和运算符需要接收用户输入的值
'''
def arithmetic(x,y,operator):
'''
:param x: 变量1
:param y: 变量2
:param operator: 运算符号
'''
if operator == '+':
return print(f'%d {operator} %d = %d'%(x,y,x+y))
elif operator == '-':
return print(f'%d {operator} %d = %d'%(x,y,x-y))
elif operator == '*':
return print(f'%d {operator} %d = %d'%(x,y,x*y))
elif operator == '/':
if y == 0:
print('除数不能为0,重新输入!')
else:
return print(f'%d {operator} %d = %d'%(x,y,x/y))
x=int(input('请输入x:'))
y=int(input('请输入y:'))
operator=input('请输入operator:')
arithmetic(x,y,operator)
练习2:
假设设一个简单的ATM机的取款过程是这样的:
首先提示用户输入密码(pakaword),最多只能输入3次,超过3次见提示用户“密码错误请取卡”结束交易。
如果用户密码码正确,再提示用户输入金额(amount).ATM机只能输出100元的纸币,一次取钱数要求最低0元,最高1000元。
如果用户输入的金额符合上述要求。则打印出用户取的钱数。最后提示用户“交易完成,请取卡”,否则提示用户重新输入金额。
假设用户密码是“888888".
'''
练习2:
假设设一个简单的ATM机的取款过程是这样的:
首先提示用户输入密码(pakaword),最多只能输入3次,超过3次见提示用户“密码错误请取卡”结束交易。
如果用户密码码正确,再提示用户输入金额(amount).ATM机只能输出100元的纸币,一次取钱数要求最低0元,最高1000元。
如果用户输入的金额符合上述要求。则打印出用户取的钱数。最后提示用户“交易完成,请取卡”,否则提示用户重新输入金额。
假设用户密码是“888888".
'''
#1.用户登录
def login(password):
'''
:param password: 密码
'''
if password == '888888':
return True
else:
return False
#2.取钱
def checkmoney(money):
'''
:param money:金额
'''
if money.isdigit(): #s.isdigit() 所有字符都是数字
if int(money)%100==0 and 0 <= int(money) <=1000:
return money
else:
return False
else:
return False
def main():
'''
ATM机取款主函数
'''
#1.用户登录
for i in range(3):
password = input('请输入密码:')
if login(password):
while True:
print('用户登陆成功!')
#2.取钱
money=input('请输入您要取的金额:')
money =checkmoney(money)
if money:
print('您取出的金额为%s元!' % money)
break
else:
print('您输入的金额有误,请重新输入!')
# 3.交易完成
print('交易完成,请取出银行卡!')
break
else:
if i==2:
print('连续三次密码输入有误,账号已冻结!')
break
print('密码输入错误,请重新输入!')
main()
练习3:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n
输入n为奇数时,调用函数求1/1+1/3+1/5...+1/n
'''
练习3:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n
输入n为奇数时,调用函数求1/1+1/3+1/5...+1/n
'''
def numbers(n):
s0=[] #存放1/偶数的值
s1=[] #存放1/奇数的值
for i in range(1,n+1):
if i>=2 and i%2==0: #偶数
s0.append(1/i)
elif i%2==1: #奇数
s1.append(1/i)
if i%2==0:
return print(sum(s0)) #返回1/偶数的和
if i%2==1:
return print(sum(s1)) #返回1/奇数的和
n=int(input('请输入n的值:'))
numbers(n)