Python_day5

    局部变量

   全局变量

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()

原文地址:https://www.cnblogs.com/ZHang-/p/10103859.html