defmain():
persons =[True]*30
counter =0
index =0
number =0while counter <15:if persons[index]:
number +=1if number ==9:
persons[index]=False
counter +=1
number =0
index +=1
index %=30#让index在循环到30时回到0for person in persons:print('基'if person else'非',end ='')
main()
基基基基非非非非非基基非基基基非基非非基基非非非基非非基基非
回顾
函数
把相对独立和将来要重复使用的写成函数
def f(a=0, b=0):
return a + b
f()
f(1)
f(1, 100)
def f(*args):
total = 0
for val in args:
total += val
return total
mylist = [1, 3, 5, 10, 20]
print(f(*mylist))
#把列表的元素当成可变元素传入列表,需要在传入时加上‘*’
作用域 - LEGB
a = 100
def f():
global a #搜索全局作用域里的a
a = 200
b = 'hello'
def g():
nonlocal b#搜索嵌套作用域里的b
b = 'good'
deff(*args):
total =0for val in args:
total += val
return total
mylist =[1,3,5,10,20]print(f(*mylist))
39
模块
from as import
单一职责原则,只把功能相关的函数放在一个模块
字符串
函数和方法的使用
列表
一个变量可以放多个元素
mylist = [x ** 2 for x in range(1, 10)]
mylist = mylist + [20, 30]
mylist =[x **2for x inrange(1,10)]
mylist = mylist +[20,30]#添加元素的方法print(mylist)
#遍历
set2 ={1,3,5,7,9}for val in set2:print(val)#集合不用下标取元素,因为集合没有顺序,是离散存储#可以用pop方法取数据,但不能确定取到哪个数据print(set2.pop())#删除数据if3in set2:
set2.remove(3)print(set3)
"""
设计一个函数,传年,月,日,返回这一天是这一年的第几天
2018-1-1
1980-11-28 333
1981-12-31 365
2016-3-1 61
"""#笨办法,,,非常坑defwhich_day(year, month, data):if(year %400==0or year %100!=0)and year %4==0:
february =29else:
february =28
years =[m for m inrange(12)]
years[0]= years[2]= years[4]= years[6]= years[7]= years[9]= years[11]=[d for d inrange(31)]
years[1]=[d for d inrange(february)]
years[3]= years[5]= years[8]= years[10]=[d for d inrange(30)]
days =0for x inrange(month -1):
days +=len(years[x])return days + data
print(which_day(1980,11,28))
333
#高大上的办法defis_leap_year(year):return(year %400==0or year %100!=0)and year %4==0defwhich_day(year, month, data):
days_of_month =[[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]][is_leap_year(year)]#布尔值在Python中True默认为1,False默认为0
total =0for index inrange(month -1):
total += days_of_month[index]return total + data
print(which_day(1980,11,28))
333
字典
#定义字典 {键:值}
dict1 ={'name':'e','age':'38','gender':True}print(dict1['name'])print(dict1['age'])print(dict1['gender'])
dict1['name']='王大锤'print(dict1)#加数据#dict1 += {'tel':'13511223344'}这种方式不行
dict1.update(height=174.5, fav=['吃','喝'])print(dict1)#遍历for x in dict1:print(x,'--->',dict1[x])#删除元素print(dict1.pop('age'))#输入键,会删除相应的元组,返回值print(dict1)print(dict1.popitem())#删掉最后一项#dict1.setdefault('motto','成年人') 设置默认值,如果不知道这个值有没有,防止调用时程序崩溃,设置它defdict['gender']#删除键所对应的值和本身print(dict1)def dict1#删掉dict1的引用
defyanghui(n=1):'''
杨辉三角形生成器
:param n: 函数
:return: 一个包含杨辉三角形的列表
'''
list1 =[[0for _ inrange(n)]for _ inrange(n)]for r inrange(n):for c inrange(n):if c ==0and r ==0:
list1[r][c]=1breakelif c ==0:
list1[r][c]=1else:
list1[r][c]= list1[r -1][c]+ list1[r -1][c -1]return list1
defyhprint(list2):'''
杨辉三角形解释器
:param list2: 杨辉三角形生成器
:return: 杨辉三角形
'''for row in list2:for num in row:if num !=0:print(num, end=' ')print('')
yhprint(yanghui(5))
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
deffactorial(n):
num = n
for x inrange(1, n):
num *= x
return num
defyanghui(n):for rol inrange(n):for col inrange(rol +1):if col ==0or col == rol:print(1, end=' ')else:
num = factorial(rol)//(factorial(col)* factorial(rol - col))print(num, end=' ')print()
yanghui(5)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
def my_spiral(n):
list1 = [[0 for _ in range(n)] for _ in range(n)]
i = 0
num = 1
x = y = 0
while num <= n ** 2:
for y in range(0 + i, n - i):
if num > n ** 2:
break
list1[x][y] = num
num += 1
for x in range(1 + i , n - i):
if num > n ** 2:
break
list1[x][y] = num
num += 1
for y in range( n - i - 2,-1 + i, -1):
if num > n ** 2:
break
list1[x][y] = num
num += 1
for x in range(n - i - 2,0 + i, -1):
if num > n ** 2:
break
list1[x][y] = num
num += 1
i += 1
return list1
def spprint(list2):
for roll in list2:
print(roll)