局部变量
全局变量
def test(): # 声明使用全局变量x global x x = 100 y = 300 # 局部变量:作用域和生存周期仅在从定义开始到函数结束 x = 200 # 全局变量:作用域从定义开始到进程结束 test() print(x)
Δ3
'''
1990.1.1 星期1
2018.11.1
'''
def isleap(y):
'''
function:判断是否为闰年
y:判断的年份
return:True / False
'''
return True if (y % 4 == 0 and y % 100 != 0 or y % 400 == 0) else False
def dayofmonth(m, y):
'''
function:m月有多少天
'''
if m in (1,3,5,7,8,10,12):
days = 31
elif m in (4,6,9,11):
days = 30
else:
if isleap(y):
days = 29
else:
days = 28
return days
def main():
year, month = eval(input('请输入年份和月份(year,month):'))
sumdays = 0
# 1990~year
for y in range(1990, year):
sumdays += (365+isleap(y))
# year.1.1 ~ year.month.1
for m in range(1, month):
sumdays += dayofmonth(m, year)
sumdays += 1
weekday = sumdays % 7
# 计算month月有多少天
monthdays = dayofmonth(month, year)
# 打印日历
m = '一二三四五六七八九十'
if month == 11:
monthstr = '十一'
elif month == 12:
monthstr = '十二'
else:
monthstr = m[month-1]
print('33[34m{:>7}月 {}'.format(monthstr, year))
print('33[0m', end='') # 关闭属性
print('33[47m日 一 二 三 四 五 六')
print('33[0m', end='') # 关闭属性
print(' '*weekday, end='')
for d in range(1, monthdays+1):
print('{:>2}'.format(d), end=' ' if (weekday+d)%7 else '
')
print()
# 调用函数
main()
练习题:
import random
'''
练习1:定义一个函数common_divisori(),求得两个整型数的最大公约数
'''
def common_divisori(m, n):
if m < n:
m, n = n, m
# 辗转相除
while True:
mod = m % n
if mod == 0:
return n
m = n
n = mod
'''
练习2:定义一个函数maxoflist(),不使用max内置函数,实现求得整型列表的最大值
'''
def maxoflist(l):
m = l[0]
for i in range(1, len(l)):
if l[i] > m:
m = l[i]
return m
'''
练习3:定义一个函数sortoflist(),不使用sorted()和sort()的基础上为一个整型列表排序(从小到大)
'''
# 冒泡排序
def sortoflist(l):
n = len(l)
for i in range(n-1):
for j in range(n-i-1):
if l[j] > l[j+1]:
l[j], l[j+1] = l[j+1], l[j]
return l
def main():
'''
m,n = eval(input("请输入两个整型数:"))
res = common_divisori(m, n)
print("{}和{}的最大公约数是:{}".format(m, n, res))
'''
l = [random.randint(1, 100) for i in range(10)]
'''
print(l)
res = maxoflist(l)
print("最大的元素是%d" % res)
'''
l = sortoflist(l)
print(l)
main()
参数类型:
位置参数
默认参数
可变参数
关键字参数
# 位置参数 def max2num(x, y): print(x, y) return x if x > y else y # 默认参数 def power(x, y=2): s = 1 while y: s *= x y -= 1 return s # 默认参数的默认值最好不是可变类型 ''' def add_end(l=[]): l.append('python') return l ''' def add_end(l=None): if l == None: l = [] l.append('python') return l # 可变参数 def sumall(*numbers): # print(type(numbers)) s = 0 for i in numbers: s += i return s # 位置参数在可变参数后 def test(*args, n=100): print(n, args) # 关键字参数 def stuinfo(name, age, city='北京', **kw): print(name, age, city, kw) # 命名关键字参数 def stuinfo2(name, age, city='北京', *, height, gender): print(name, age, city, height, gender) # 多种参数类型混合使用 位置参数在第一位,关键字参数一定在最后 def test2(locate, *args, name, age, default=100, **kw): print(locate, args, default, name, age, kw) res = max2num(10, 20) print(res) res = max2num(y=100, x=200) print(res) print(power(10, 4)) print(power(10)) ls = [1,2,3] add_end(ls) print(ls) print(add_end()) print(add_end()) print(add_end()) res = sumall(1,2,3,4,5) print(res) test(1,2,4,5) stuinfo('张', 20, height=178, gender='M', school='河北农大') stuinfo2('张', 20, height=178, gender='M') stuinfo2('张', 20, gender='M', height=175) test2(1, 'hello', 'world', name='uplooking', age=14, python='guido', height=180)
递归调用:
在函数内调用函数本身
1. 找到终止条件
2. 找到递归条件
def sumn(n): ''' n的前n项和 ''' if n == 0: return 0 return n + sumn(n-1)
print(sumn(10))
练习:
''' Fibnacci数列的第n项 ''' def fibnacci(n): if n <= 0: return False if n == 1: return 0 elif n == 2: return 1 return fibnacci(n-1) + fibnacci(n-2)
for i in range(1, 21):
print(fibnacci(i), end = ' ')
print()