##人生苦短,我用python
##课程内容
#条件判断
#循环
#类:简单介绍类的用法
##条件判断
#if condiction:
# dosomething
#else:
# dosomething
total_cost = 32.5
if total_cost>30:
discount = 0.9
elif total_cost>20:
diacount = 0.95
else :
discount = 1
total_cost = discount
print('小姐姐买水果的花费为:{}元'.format(total_cost))
#布尔型变量做运算
a = True
b = False
print('a is {},b is {}'.format(a,b) )
print('a and b is {}'.format(a and b) )
print('a or b is {}'.format(a or b) )
print('not a is {}'.format(not a) )
##条件判断的近亲-断言:我断言它肯定是这样的,如果不是我就崩溃
age=19
assert age==18,'她竟然不是18岁'#如果age是18则是18,如果不是就输出“她竟然不是18岁”。为了程序员捕捉或者调试错误出现的
##循环for循环(遍历循环),while循环(条件循环)
#for循环:遍历循环
costs = [2,3,5,7,9,4]
for cost in costs:
print('消费{}元'.format(str(cost).center(10))#str()转换成字符串形式,center()为了格式好看
#生成一个长度为20的一个随机列表
# 生成随机数需要使用random模块
import random
# 生成一个1-10之间的随机数
random.randint(1,10)
random_numbers = []
while len(random_numbers)<20:
random_numbers.append(random_numbers.randint(1,10))
print(random_numbers,len(random_numbers))
random_numbers = []
for i in range(20):
random_numbers.append(random.randint(1,10))
print(random_numbers,len(random_numbers))
##编程建议:就是只要能使用for循环就不要使用while循环
##当循环条件跟数量没有关系时只能使用while循环
#题目:往空列表添加随机数,直到添加的数为9时结束,只能用while
random_numbers = []
while 9 not in random_numbers:
random_numbers.append(random.randint(1,10))
print(random_numbers,len(random_numbers))
##问题:a = [1,2,3]是个列表,判断b = 1,c = (b in a),判断c是什么类型,是不是一个元组呢?不是元组,是一个布尔型变量。元组永远是true
import time
number = 0
while True:
time.sleep(1)
number+=1
print('hello world,{}'.format(number),end = '\r')
a = []
b = ()
type(a),type(b)
random_numbers=[6,3,7,5,9]
#跳出本次循环
for number in random_numbers:
if number % 2 ==0:
print('{} is 偶数'.format(number))
else:
continue
#跳出全部循环
for number in random_numbers:
if number % 2 == 0:
print('{} is 偶数'.format(number))
else:
break
print("没有跳过")
else:
print('全是偶数')
##for 可以构建推导式:可以从一个数据系列构建另一个数据系列
random_numbers = list(range(10))
random_numbers
new_numbers = []
for number in random_numbers:
new_numbers .append(number=10)
#g构建推导式:
new_numbers = [number*10 for number in random_numbers]##拼凑出新的列表,叫做列表推导式,即我们是在列表里使用for进行的推导式,也可以拥有字典推导式
##字典推导式
print(dict_numbers = {number :'A' for number in random_numbers})
tuple_number = (number*10 for number in random_numbers)##tuple此时是一个生成器,是一个可迭代的序列
##生成器:在网上下电影想下高清的但是内存不够,但是还是可以看到大于内存的,说明电影不是一下子就下载到内存上的,是一边播放一边下载的。
tuple(tuple_number)
###函数:抽象概念 函数名 括号传递参数 return返回值 位置参数是不可以交换位置的
variable_item = {'a':100,'b':200,'c':300,'d':400,'e':500}
[key for key,value in variable_item.items() if value ==100]##繁琐
#定义函数
def get_keys(dict_variable,value):
return [k for k,v in dict_variable.items() if v ==value]
get_keys(variable_item,100) #调用的时候传递的参数才是实参
#函数是封装好的,可以重复使用的,能够完成特定功能的代码块,它是代码的抽象
def pow1(x,a):
y = x**a
print('y is {}'.format(y))
y1 = pow1(2,3)
#不建议对可变类型在函数内进行更改,建议用函数返回值进行重新赋值
def test(variable):
temp = variable.copy()
temp.append(100)
return temp
var = []
var = test(var)
#参数收集:就是在用的时候还不知道要不要用其他的参数,就先进行一下空间的开辟## **就是收集key=value这种形式的参数
def test2(name,age,*args,**kwargs):
print(name,age,*args,**kwargs)
test('wrong',12,23,'[k]',[12,23])
dict_variable={
'weight':100,
'height':200
}
test('wrong',12,**dict_variable)#收集位置参数,收集关键字参数?
##装饰器:
a = 10
b = [11,12]
def test():
print('test')
c = test
#可以把函数赋值给一个变量,函数返回函数,函数可以当做函数的·返回值进行返回
def test1(func):
return func
f = test1(func)
f.__name__
f()
#返回一个从0-1的浮点数
import random
def test():
return round(random.random(),1)
#函数返回的浮点数保留3个有效数字
##python另一个语法糖。装饰器
@decorator
import random
def test():
return random.random(),1
@decorator
def decorator(func):
def wrapper(*args,**kwargs):
#do something
return round(func(*args,**kwargs),3)
return wrapper()
f = decorator(test)
test.__name__
###类
class Person:
def __init__(self,name,age):
#初始化函数中,self后边是实例化对象的属性,加下划线的意思是这个属性是私有的,不应该访问
self._name = name#表示我该属性是隐私的
self._age = age
def get_name(self):
return self._name
s = 'hello world'
a.center(12)
p = Person('wang',12)
p.get_name()
#继承
class Student(person):
pass #什么都不做,占个位而已