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 '\n') 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()