末学者笔记--Python基础三玄

Python基础三玄

、可变类型和不可变类型                                                              

1.可变类型

#id不变的情况下,value可以变,则称为可变类型,如列表,字典

l1 = [1,2,3,4]
t1 = (1,2,3,4)
print(id(l1))
l1[1] = 33333333333333333333333
print(id(l1))
info = {'name':'张小三'}
print(id(info))
info['name'] = '李四'
print(id(info))

》》

36500304

36500304

6410768

6410768

》》

2. 不可变类型:

#value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)

如:整数,浮点数,字符串

# a = 10

# print(id(a))

# a = 100

# print(id(a))

其id前后不同

 

引申】:

 元组,集合

a = (1,2,3,4)
print(id(a))
b = (1,2,3,4)
print(id(b))


s1 = {1,2,3,4}
print(id(s1))
s2 = {1,2,3,4}
print(id(s2))

》》

7709728

7709872     #同值的变量id却不同

6223672

6223552

》》

 

但是添加字典的值,id可不变

s1 = {1,2,3,4}
print(id(s1))
s1.add('a')
print(s1)
print(id(s1))

》》

6486056

{1, 2, 3, 4, 'a'}

6486056

》》

二:内置函数(leninnot in)                                              

1.len统计长度

# a = {'name':'程泽宇', 'age':23}

# print(len(a))

 

2.Innot in

in :....里面,有则true,无则false

# print('e' in 'hello')

 

not in :不在.....里面,没有则true,有则false

# print('e' not in 'hello')

 

、基本运算符                                                                    

 

、比较运算符                                                                             

 

 

、赋值运算符                                                                            

 

 

、身份运算符                                                                            

is==的区别

#is判断内存地址
#==判断变量值
#一个内存地址可以对应多个变量,一个变量只能对应一个内存地址

a =10
b =10.0
print(a==b)
print(a is b)
print(id(a))
print(id(b))

》》

True

False

505359648

6504192

》》

、流程控制if...else....                                                                  

1.语法

if 条件语句

    执行的代码块

else:

    执行的代码块

2.额外

a = {}
# a为None,0,空 三种情况时为假,其余都为真
if a:

    print('真')
else:
    print('假')

》》

》》

 

、逻辑运算符                                                                       

 

练习:

#1.定义布尔型变量 has_ticket 表示是否有车票

#2.定义整形变量 knife_length 表示刀的长度,单位:厘米

#3.首先检查是否有车票,如果有,才允许进行安检

#4.安检时,需要检查的长度,判断是否超过20厘米

#   如果超过20厘米,提示刀子的长度,不允许上车

#   如果不超过20厘米,按键通过

#5.如果没有车票,不允许进门

 

ticket = input('请问您是否有车票:(1:有,2:无):')
if ticket=='1':
    nife = input('您的随身刀具长度为:')
    if  nife <='20':
        print('请上车,一路平安')
    else:
        print('刀具过长,请处理之后再上车')
else:
    print('请购买车票再来')

 

、流程控制之while                                                                 

while 条件:    

    # 循环体

 

    # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。

# 如果条件为假,那么循环体不执行,循环终止

1. 打印04的数字

i = 0
while i < 5:
    print(i)
    i+=1

 

2.打印010之间的偶数

方案一:

i =0
while i <11:
    print(i)
    i+=2

 

方案二:

i =0
while i < 11:
    if i % 2 == 0:
        print(i)
    i+=1

 

3.死循环

除了0,None,空这几个假量,其他的几乎都可以作死循环条件

如:

while 1:
    print('循环到底')

 

4.while....else...

count = 0
while count <= 3 :
    count += 1
    print("hehe",count)
else:
    print("循环已执行完")

》》

hehe 1

hehe 2

hehe 3

hehe 4

循环已执行完

》》

 

5.pass,continue,break使用

continue跳过本次循环进入下一次循环】:

count = 0
while count <= 4 :
    count += 1
    if count==3:
        continue
    print("hehe",count)

》》

hehe 1

hehe 2

hehe 4

hehe 5

》》

 

breck跳出整个循环体

count = 0
while count <= 4 :
    count += 1
    if count==3:
        break
    print("hehe",count)

》》

hehe 1

hehe 2

》》

 

pass是仅用来占位的,一般作补全语境用

count = 0
while count <= 3 :
    count += 1
    if count==3:
        pass     #触发条件不作任何处理
    print("hehe",count)

》》

hehe 1

hehe 2

hehe 3

hehe 4

》》

 

6.猜拳游戏

import random    #‘import’:调用模块random’:随机数
win =0

fault=0
balance=0
while True:
    com = random.choice(['1', '2', '3'])  # 1:石头,2:剪刀,3:布
    print('——————欢迎来到猜拳大赛——————')

    sum = input('请输入 ——1:石头,2:剪刀,3:布, 4:结束游戏    ')
    print(com)
    #赢
    if (sum=='1'and com=='2') or (sum=='2'and com=='3') or (sum=='3' and com=='1'):

        print('流弊,你赢了!')
        win+=1
    #败
    elif (sum=='1'and com=='3') or (sum=='2'and com=='1') or (sum=='3'and com=='2'):

        print('犹豫,就会败北!')
        fault+=1
    #平
    elif (sum==com):

        print('你瞅啥,平局!')
        balance+=1
    elif sum=='4':
        print('胜:%s  败:%s 平:%s' %(win,fault,balance))
        break
    else:

        print('请输入正确数字')

十.流程控制之for循环                                                    

1 迭代式循环:for,语法如下

  for i in range(10):

    缩进的代码块

【列出1至10间的奇数

for i in range(1,10,2):     #取1至10间,步长为2的数
    print(i)

>>

1

3

5

7

9

>>

 

【例1

a = {'name':'张小三','age':23}
for i in a:
    print(i)
for i in a.items():
    print(i)
for i,k in a.items():
    print(i,k)

>>

name

age

('name', '张小三')

('age', 23)

name 张小三

age 23

>>

2 breakcontinue(同上while

十一:文件

1.文件操作

在桌面上创建test.txt文本并写入值:

 

python中打开此文件:

将文件的路径复制粘贴如下

 

file = open('C:UsersAdministratorDesktop est.txt','r',encoding='utf-8')

#open:打开文件,内接文件路径;

#后接‘r’或‘w’或‘a’,encoding='utf-8':表示以utf-8’转码来进行读或写或添加操作,有些电脑是gbk’转码

#或者直接接rbwbab,分别表示:以二进制形式读,写,添加操作

#这里有一个报错,因为‘U’在Python里是有特殊含义的,需改正如下三种:


file = open('C:/Users/Administrator/Desktop/test.txt','r',encoding='utf-8')    #将‘’变‘/’
file = open('C:\Users\Administrator\Desktop\test.txt','r',encoding='utf-8')    #多加一个‘’
file = open(r'C:UsersAdministratorDesktop est.txt','r',encoding='utf-8')    #在引号前面加一个‘r’,强烈推荐

 

#这里要注意字符编码,秉承一个原则就不会出现乱码(用什么方式写的,就用什么方式打开)

2.r’及‘rb’:

 

正常分三步:

file = open(r'C:UsersAdministratorDesktop est.txt','r',encoding=utf-8)   #打开文件
file.read()    #读或写操作
f.close()    #关闭文件,若不关闭,当查看文件过多时,会大量占用内存

 

总是关闭很繁琐,有简单的,在前面加‘with’即可自动关闭:

with open(r'C:UsersAdministratorDesktop est.txt','r',encoding='gbk') as f:

    a=f.read()
    print(a)    #查看文件为原文件内容

当将r’改为‘rb’,查看的文件就是一堆字节码

with open(r'C:UsersAdministratorDesktop est.txt','rb') as f:

    a=f.read()
    print(a)

 

【拓展】

with open(r'C:UsersAdministratorDesktop est.txt','r',encoding='gbk') as f:
    data = f.read(3)    #只读3个字符
    print(data)
    data = f.readline()    #读一整行
    print(data)

》》

2介绍

之后的进行只对金额:

》》

 

    data = f.readlines()    #把内容转化成列表的形式
    print(data)

    for i in data:
    print(i)    #会以每行输出

# res = f.readable()    #是否可读,判断为布尔类型

 

 

 

3.写。‘w’及‘wb

在桌面新建一个空txt文件

with open(r'C:UsersAdministratorDesktop est1.txt','w',encoding='gbk') as f:
    f.write('你好,世界网')

查看:

 

 

with open(r'C:UsersAdministratorDesktop est1.txt','wb',) as f:
    f.write(b'holle,world')    #需要加‘b’,来转码写入

#    f.write(b'你好,中国')    #这个报错是因为二进制只支持ASCII码,不支持中文
查看:

 

【note】:这个写操作会覆盖掉源文件内容

补:

# res = f.writable()#是否可写

 

4.追加:‘a’,‘ab

a’和‘ab’的区别与读写类似

with open(r'C:UsersAdministratorDesktop est.txt','a',encoding='gbk') as f:
    f.write('回手掏')    #只追加在末尾而不覆盖

    f.writelines(['最','后','一','行'])    #把列表的元素添加到文档中

    f.write('1111 222 ')    #针对文本模式的写,需要自己写换行符

 

5.光标

f.seek(0,0)    #等价于f.seek(0),代表把光标移动到开头

【注】seek只在字节上移动光标,不移字符

 

f.seek(2,1)    #代表在相对位置移动2个字节(1代表光标的相对位置,2代表在相对位置上把光标向后移动2个字节)

 

f.seek(-3,2)    #代表在末尾往前移动3个字节(2代表把光标移动到末尾,-3代表把光标向前移动3个字节)

 

f.read(3)    #若是utf-8模式则代表读取3个字符,若是bites模式下则代表读取三个字节(意思是光标在第三个字节后面)

 

【光标位置移动】

#光标的移动模式  0:顶头  1:相对位置   2:末尾位置

    #12只能在bytes(字节)模式下去运行(0,1)  (0,2)除外

    #utf8中一个汉字3个字节,生僻字占的更多gbk模式中一个汉字占2个字节

# f.seek(3,0)    #3代表字节

 

【例】

 

with open(r'C:UsersAdministratorDesktop est.txt','rb') as f:
    f.seek(26,0)
    a =f.read(4)
    print(a.decode('gbk'))
    f.seek(2,1)
    a =f.read(6)
    print(a.decode('gbk'))
    f.seek(-4,2)
    a =f.read(4)
    print(a.decode('gbk'))

》》

pyth

的创始

一行

》》

————————————————————————————分割线——————————————————————————

原文地址:https://www.cnblogs.com/feige2L/p/10951385.html