学学python(网易云课堂总结)(变量类型与基础函数)

2019-03-29  本文已影响0人  鱼丸_a47d

变量类型

数字类型

布尔型: true=1 false=0

字符串型

!单引号与双引号间断性使用

s = "Let's go"
print(s)
ss = 'Let\'s go'
print(ss)
s1 = "I love \r\n wangixoajing"   回车换行符 \n
-------------------------------------------------------
Let's go
Let's go
I love 
 wangixoajing
print("I love %s"%"wangxiaojing")
I love wangxiaojing
s = "I am %d years old"
print(s%18)
s = "I am %s, i am %d years old"
print(s%("tulingxueyuan", 18))   #如果出现多个占位符, 需要用括号括起来
s = "Yes, i am {1} years old, I love {0} and i am {1} years old".format("Tulingxueyuan", 18)
print(s)
Yes, i am 18 years old, I love Tulingxueyuan and i am 18 years old
+ - * / % // **
取余运算 取商运算 幂运算
9%4=1 9//4=2

a += 7 # a = a+ 7 的缩写
-=, ×=, /=, //=, %=, **=,都是缩写形式

a = True
b = False
c = True
 d = a and b or c 
 式子等价于 d = 1 * 0 + 1
结果为 True
l = [1,2,3,4,5]
a = 7
b = a in l
print(b)
结果为 false

三大结构

input 函数
score = input("请输入学生成绩:")

顺序结构

分支结构

基本语句

image.png

双向分支

image.png

多路分支

image.png

循环结构

for 循环

image.png
for name in  ['zhangsan', 'lisi', 'wangwu','jingjing']:
    print(name)
    if name == "jingjing":
        print("我的最爱{0}出现了".format(name))
    else:
        print("同学我们不约,不约,同学请自重")
---
zhangsan
同学我们不约,不约,同学请自重
lisi
同学我们不约,不约,同学请自重
wangwu
同学我们不约,不约,同学请自重
jingjing
我的最爱jingjing出现了

range 可以生成一个数字序列
(1,11) 表述1-1

for-else 循环

循环 break continue pass

for i in range(1,11):
    if i == 7:
        print("我找到了")
        break
    else:
        print(i)
---
1
2
3
4
5
6
我找到了
----
for i in range(1,11):
    if i % 2 == 1:
        continue
    else:
        print("{0} 是偶数".format(i))
---
2 是偶数
4 是偶数
6 是偶数
8 是偶数
10 是偶数
---
for i in range(1,3):
    pass
    print("wo zai zheli")
---
wo zai zheli
wo zai zheli

while 循环

image.png

else 表述条件循环结束后进入else 循环

benqian = 100000
year = 0
while benqian < 200000:
    benqian = benqian * (1+0.067)
    year += 1 # year = year + 1
    print("第 {0} 年拿了 {1} 块钱".format(year, benqian))
else:
    print("大爷的,终于翻倍了,10多年呀")
    print("当年10万可以盖个房子,现在儿子结婚,20万可以给他盖个厨房了")
----

第 1 年拿了 106700.0 块钱
第 2 年拿了 113848.9 块钱
第 3 年拿了 121476.77629999998 块钱
第 4 年拿了 129615.72031209998 块钱
第 5 年拿了 138299.97357301068 块钱
第 6 年拿了 147566.07180240238 块钱
第 7 年拿了 157452.99861316333 块钱
第 8 年拿了 168002.34952024528 块钱
第 9 年拿了 179258.5069381017 块钱
第 10 年拿了 191268.8269029545 块钱
第 11 年拿了 204083.83830545243 块钱
大爷的,终于翻倍了,10多年呀
当年10万可以盖个房子,现在儿子结婚,20万可以给他盖个厨房了

自设函数def

return
1.函数一旦执行return语句,则无条件返回,即结束函数的执行
2.如果没有return,默认返回一个None

def hello(person):
    print("{0}, 你肿么咧".format(person))
    print("Sir, 你不理额额就走咧")
  
p = "明月"
hello(p)
---
明月, 你肿么咧
Sir, 你不理额额就走咧
---
def hello(person):
    print("{0}, 你肿么咧".format(person))
    return "哈哈,我提前结束了"
    print("Sir, 你不理额额就走咧")
    return "我已经跟{0}打招呼了,{1}不理我".format(person, person)

p = "LiYing"
rst = hello(p)
print(rst)
---

LiYing, 你肿么咧
哈哈,我提前结束了

exercise 九九乘法表

for row in range(1,11):
    for col in range(1,row+1):
        print(row*col,end=" ")
    print("")
---
1 
2 4 
3 6 9 
4 8 12 16 
5 10 15 20 25 
6 12 18 24 30 36 
7 14 21 28 35 42 49 
8 16 24 32 40 48 56 64 
9 18 27 36 45 54 63 72 81 
10 20 30 40 50 60 70 80 90 100 
---
def printLine(row):
    for col in range(1, row+1):
        # print函数默认任务打印完毕后换行
        print( row * col, end=" ")
    print("")
  
# 九九乘法表
# version 2.0
for row in range(1,10):
    printLine(row)

参数详解

(四类参数:普通参数、默认参数、关键字参数、收集参数)

def reg(name, age, gender="male"):
    if gender=="male":
        print("{0} is {1}, and he is a good student".format(name, age))
    else:
        print("{0} is {1},and she is a good student".format(name, age))
reg("xiaoming", 21)
reg("xiaotian", 23,"female")
---
xiaoming is 21, and he is a good student
xiaotian is 23,and she is a good student

普通参数 容易出现位置传递出错

def stu(name, age, addr):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))   
n = "jingjing"
a = 18
addr = "我家"
stu(a, n, addr)
---
I am a student
我叫 18, 我今年 jingjing岁了, 我住我家
---
def stu_key(name="No name", age=0, addr="No addr"):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))
n = "jingjing"
a = 18
addr = "我家"
stu_key(age=a, name=n, addr=addr)
---
I am a student
我叫 jingjing, 我今年 18岁了, 我住我家

1.把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
2.参数名args不是必须这么写,但是,我们推荐直接用args,约定俗成;必须有*号

def func(*args):
func_body
按照list使用方式访问args得到传入的参数
调用:
func(p1, p2, p3, .....)

def stu( *args):
   print("Hello 大家好,我自我介绍以下,简答说两句:")
   # type函数作用是检测变量的类型
   print(type(args))
   for item in args:
       print(item)

stu("liuying", 18, "北京大通州区", "wangxiaojing", "single")
---
Hello 大家好,我自我介绍以下,简答说两句:
<class 'tuple'>
liuying
18
北京大通州区
wangxiaojing
single

def func( **kwargs):
func_body
调用:
func(p1=v1, p2=v2, p3=v3........)

 def stu( **kwargs):
    # 在函数体内对于kwargs的使用不用带星号
    print("Hello 大家好,我先自我介绍一下:")
    print(type(kwargs))
    # 对于字典的访问,python2 和python3有区别
    for k,v in kwargs.items():
        print(k, "---", v)
    
stu(name="liuying",  age=19, addr="北京大通州区", lover="王晓静", work="Teacher")

使用规则就是,普通参数和关键字参数优先
定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict

def stu(name, age, *args, hobby="没有", **kwargs):
    print("Hello 大家好")
    print("我叫 {0}, 我今年{1}大了。".format(name, age))
    if hobby == "没有":
        print("我没有爱好, so sorry")
    else:
        print("我的爱好是{0}".format(hobby))
        
    print("*" * 20)   
    
    for i in args:
        print(i)
    
    print("#" * 30)
    
    for k,v in kwargs.items():
        print(k, "---", v)
        
        
# 开始调用函数
name = "liuying"
age = 19


# 调用的不同格式
stu(name, age)

stu(name, age, hobby="游泳")

stu(name, age, "王晓静", "刘石头", hobby="游泳", hobby2="烹饪", hobby3="跟不同女生聊天")
---
Hello 大家好
我叫 liuying, 我今年19大了。
我没有爱好, so sorry
********************
##############################
Hello 大家好
我叫 liuying, 我今年19大了。
我的爱好是游泳
********************
##############################
Hello 大家好
我叫 liuying, 我今年19大了。
我的爱好是游泳
********************
王晓静
刘石头
##############################
hobby2 --- 烹饪
hobby3 --- 跟不同女生聊天

解包符号用*
dic 的解包符号用**

def stu(*args):
    print("哈哈哈哈哈")
    # n 用来表示循环次数
    # 主要用来调试
    n = 0
    for i in args:
        print(type(i))
        print(n)
        n += 1
        print(i)
        
        
#stu("liuying", "liuxiaoyhing", 19, 200)

l = ["liuying", 19, 23, "wangxiaojing"]
 
#stu(l)
# 此时,args的表示形式是字典内一个list类型的元素,即 arg = (["liuying", 19, 23, "wangxiaojing"],)
# 很显然跟我们最初的想法违背


# 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号
stu(*l)
---

哈哈哈哈哈
<class 'str'>
0
liuying
<class 'int'>
1
19
<class 'int'>
2
23
<class 'str'>
3
wangxiaojing
def func_1():
    print("有返回值呀")
    return 1

def func_2():
    print("没有返回值")
     
    
f1 = func_1()
print(f1)

f2 = func_2()
print(f2)
---
有返回值呀
1
没有返回值
None

变量的作用域

a1 = 100

def fun():
    print(a1)
    print("I am in fun")
    # a2的作用范围是fun
    a2 = 99
    print(a2)
    
    
print(a1)
fun()
print(a2)
100
100
I am in fun
99
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-36e1efbb7d66> in <module>()
     12 print(a1)
     13 fun()

提升局部变量未全局变量

def fun():
    global b1
    b1 = 100
    print(b1)
    print("I am in fun")
    # a2的作用范围是fun
    b2 = 99
    print(b2)
    
    

#print(b2)
fun()
# print(b1)如果在函数调用上面,则不好使,报错,为什么???
print(b1)
——
100
I am in fun
99
100

eval 函数与exec函数

eval 函数
把一个字符串当成一个表达式来执行, 返回表达式执行后的结果
语法:
eval(string_code, globals=None, locals=None)
exec()函数
跟eval功能类似, 但是,不返回结果
语法:
exec(string_code, globals=None, locals=None)

x = 100
y = 200
# 执行x+y
# z = x + y
z1 = x + y
z2 = eval("x+y")

print(z1)
print(z2)
————
300
300
————
# exec示例
x = 100
y = 200
# 执行x+y
# z = x + y
z1 = x + y
# 1, 注意字符串中引号的写法
# 2. 比对exec执行结果和代码执行结果
z2 = exec("print('x+y:', x+y)")

print(z1)
print(z2)
——————-
x+y: 300
300
None

递归函数

x=0
def fun():
    global x
    x+=1
    print(x)
    fun()
fun()
——-
结果就是1-1098
def hano(n,a,b,c):
    if n==1:
        print(a,"--",c)
        return None
    hano(n-1,a,c,b)
    print(a,"--",c)
    hano(n-1,b,a,c)
a="A"   
b="B"
c="C"
n=5
hano(n,a,b,c)

内置数据结构(变量类型)

list

l=[2,5,67,87,9]
print(l[3])
——-
87

1.注意截取范围,包含左边的下标志,但是不包含右边的下标值
2.下标值可以为空,左边为空默认为0,但是右边为空默认截取到最后一个数字

l=[3,2,1,4,6,3,2]
print(l[:])
print(l[:4])
print(l[2:])
———
[3,2,1,4,6,3,2]
[3,2,1,4]
[1,4,6,3,2]

1.分片操作可以控制增长幅度,默认为1
2.如果为负数,则表示顺序从右往左
3.规定,数组最后一个数字的下标为-1
4.正常情况下,分片左边的值一定大于右边的值,否则步长参数需要使负数
5.**分片操作是一个新的list(证明使用id函数print((id(l))

x=0
def fun():
    global x
    x+=1
    print(x)
    fun()
fun()
print(l[1:6:2]
[2,4,3]
print(l[-2:-4])
[]
print(l[-4:-2])
[4,6]
print(l[-2:-4:-1])
[3,6]
a=[1,2,3,4,5,6]
del a[2]
print(a)
——
[1,2,4,5,6]
a=[1,2,3,4]
b=[5,6]
c=a+b
print(c)
——
[1,2,3,4,5,6]
a=[1,2]
c=a*3
print(c)
——
[1,2,1,2,1,2]
a=[1,2,3]
b=[1]
c=b in a
d=[4]
e=d not in a
print(c)
print(e)
——
True
True
for in list
a = [1,2,3,4,5]
# 挨个打印a里边的元素
for i in a:
    print(i)
1
2
3
4
5
———
b = ["I love wangxiaojing"]
for i in b:
    print(i)
——
I love wangxiaojing 
a = [["one", 1], ["two", 2], ["three", 3] ]

for k,v in a:
    print(k, "--", v)
one -- 1
two -- 2
three — 3
a = [["one", 1, "eins"], ["two", 2,"zwei"], ["three", 3,"drei"] ]
#这个例子说明,k,v,w的个数应该跟解包出来的变量个数一致
for k,v,w in a:
    print(k, "--", v, "--",w)
one -- 1 -- eins
two -- 2 -- zwei
three -- 3 -- drei
a = ['a', 'b', 'c']
# 用list a创建一个list b
# 下面代码的含义是,对于所有a中的元素,逐个放入新列表b中
a = ['a', 'b', 'c']
aa=[1,2,3,4,5]
b = [i for i in a]
print(b)
c=[i*10 for i in aa]
———
['a', 'b', 'c']
[10,20,30,40,50]
———————————————-
a = [x for x in range(1,35)] #生成从1到34的一个列表
# 把a中所有偶数生成一个新的列表 b
b = [m for m in a if m % 2 == 0]
print(b)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34]
—————————————————
# 列表生成式可以嵌套
# 由两个列表a,b
a = [i for i in range(1,4)] # 生成list a
print(a)

b = [i for i in range(100,400) if i % 100 == 0]
print(b)

# 列表生成是可以嵌套,此时等于两个for循环嵌套
c = [  m+n for m in a for n in b]
print(c)

# 上面代码跟下面代码等价
for m in a:
    for n in b:
        print(m+n, end="  ")
print()

# 嵌套的列表生城市也可以用条件表达式
c = [  m+n for m in a for n in b if m+n < 250]
print(c)
—————
[1, 2, 3]
[100, 200, 300]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
101  201  301  102  202  302  103  2
s = "I love"
print(list(s))
['I', ' ', 'l', 'o', 'v', 'e']
—————————
a = [x for x in range(1,100)]
print(len(a))
——- 
99

函数的内置结构

关于列表的的函数

学学python(网易云课堂总结)(变量类型与基础函数)
学学python(网易云课堂总结)(变量类型与基础函数)
学学python(网易云课堂总结)(变量类型与基础函数)

浅拷贝与深拷贝

copy是浅拷贝浅拷贝即是当存在多层的嵌套list时,其拷贝只拷贝第一层,第二层仍然是简单的复制操作。

a = [1,2,3,4,5,666]
print(a)
# list类型,简单赋值操作,是传地址
b = a
b[3] = 777
print(a)
print(id(a))
print(b)
print(id(b))

print("*" * 20)

# 为了解决以上问题,list赋值需要采用copy函数
b = a.copy()
print(a)
print(id(a))
print(b)
print(id(b))
print("*" * 30)
b[3] = 888
print(a)
print(b)
————
[1, 2, 3, 4, 5, 666]
[1, 2, 3, 777, 5, 666]
140249408975432
[1, 2, 3, 777, 5, 666]
140249408975432
********************
[1, 2, 3, 777, 5, 666]
140249408975432
————
a = [1,2,3, [10, 20, 30]]
b = a.copy()
print(id(a))
print(id(b))
print(id(a[3]))
print(id(b[3]))
a[3][2] = 666
print(a)
print(b)
————
140249408365768
140249409236040
140249409236232
140249409236232
[1, 2, 3, [10, 20, 666]]

元组-tuple

a,b = b,a 即是a b 的数值进行了交换

集合set

成员检测

集合遍历操作

s = {4,5,"i", "love", "wangxiaojing"}
for i in s:
    print(i, end=" ")
———
i 4 5 wangxiaojing love 
————
# 带有元组的集合遍历
s = {(1,2,3), ("i", "love", "wangxiaojing"), (4,5,6)}
for k,m,n in s:
    print(k, "--", m, "--", n)
for k in s:
    print(k)
4 -- 5 -- 6
i -- love -- wangxiaojing
1 -- 2 -- 3
(4, 5, 6)

集合的内涵

s = {23,223,545,3,1,2,3,4,3,2,3,1,2,4,3}
print(s)

# 普通集合内涵
ss = {i for i in s}
print(ss)
—————
{545, 1, 3, 2, 4, 23, 223}
{545, 2, 3, 4, 1, 23, 223
———
# 多循环的集合内涵
s1 = {1,2,3,4}
s2 = {"i", "love", "wangxiaojing"}
s = {m*n for m in s2 for n in s1}
print(s)
s = {m*n for m in s2 for n in s1 if n ==2}
print(s)
{'iii', 'i', 'lovelovelove', 'ii', 'lovelovelovelove', 'wangxiaojingwangxiaojingwangxiaojingwangxiaojing', 'wangxiaojing', 'lovelove', 'wangxiaojingwangxiaojing', 'love', 'wangxiaojingwangxiaojingwangxiaojing', 'iiii'}
{'lovelove', 'wangxiaojingwangxiaojing', 'ii'

集合的函数

冰冻集合:frozen set

字典 dict

   d={"one":1,"two":2,"three":3}
print(d)
d=dict(one=1,two=2,three=3)
print(d)
d = dict( [("one",1), ("two",2), ("three",3)])
# 三者的结果是一样的 , 都是上述的字典集合
———
{'one': 'eins', 'two': 2, 'three': 3}
> 下面:[]内是键值
print(d["one"])
d["one"]="eins"
print(d)
{'one': 'eins', 'two': 2, 'three': 3}
del d["one"]
print(d)
{'two': 2, 'three': 3}
—————
if 2 in d:
    print("value")
if "two" in d:
    print("key")
if ("two",2) in d:
    print(kv)
 > 只有第二种才能处出结果
d = {"one":1, "two":2, "three":3}
#使用for 循环,直接按照key的值访问
for k in d:
    print(k,d[k])
#效果如上
for k in d.keys():
    print(k,d[k])
#只访问字典的值
for v in d.values():
    print(v)
#特殊用法
for k,v in d.items():
    print(k,"---",v)

##字典的生成式

d = {"one":1, "two":2, "three":3}

常规字典生成式

dd = {k:v for k,v in d.items()}
print(dd)

加限制条件的字典生成式

dd = {k:v for k,v in d.items() if v % 2 == 0}
print(dd)
{'one': 1, 'two': 2, 'three': 3}
{'two': 2}

##字典的相关函数
-Len max min dict
- items 返回字典的键值对组成的元组形式
- clear 清空字典
- keys 返回字典的键组成的结构
- values 同理,返回可迭代的结构
- get 根据指定键返回相应的值
- fromkeys 使用制定的序列作为键,使用一个值作为字典的所有的键的值

l = ["eins", "zwei", "drei"]

注意fromkeys两个参数的类型

注意fromkeys的调用主体

d = dict.fromkeys(l, "hahahahahah")
print(d)
{'eins': 'hahahahahah', 'zwei': 'hahahahahah', 'drei': 'hahahahahah'}





          




上一篇下一篇

猜你喜欢

热点阅读