day02 数据类开&文件操作&字符编码

本文介绍了Python的基础知识,包括解释性语言、IDE、数据类型、变量、运算符、循环、条件判断、字符串和列表操作。此外,还讨论了编码、格式化输出、逻辑运算符、身份运算符以及字典的使用。文中通过实例展示了如何应用这些概念,例如双色球选号、用户登录验证和列表元素操作。
摘要由CSDN通过智能技术生成

https://www.cnblogs.com/Eva-J/articles/11168936.html#_label3

python之路:https://www.cnblogs.com/Eva-J/articles/7277026.html

知识点回顾

解释性语言 :写好的代码,交给解释器,就可以运行起来

IDE:集成开发工具(pycharm、sublime)

可变数据类型:值发生改变,内存地址不变(列表,字典)

不可变数据类型:值发生改变,内存地址也改变了(字符串、元组)

基本数据类型

bool值 : True真 False假
int   整数 : +-*/ // % (算术运算) > < >= <= ==(比较运算)
	% 取余
	num%2 == 0 偶数
	num%2 == 1 奇数
	分页
float 小数 算术运算 比较运算
str字符串
	要显示出来给人看的
	print input('输入的提示 :')
	'hello' "hello"   显示单行
	'''hello'''  """hello"""  显示多行
数据类型之间的转换
	num = 5
	s = str(num)  # '5'
	s2 = '5'
	n2 = int(s2)
	s3 = '5.4'
	f3 = float(s3)
	想把一个变量转换成某一个类型
	新的类型的变量 = 类型名(变量)

变量

# 常量 - 符合变量的命名规则,全大写
# 注释
    # 井号
    # 三引号
# 输入输出
    print() 打印给用户看、输出
    input() 输入给计算机去操作
# 运算符
    +-*/ // % (算术运算)
    > < >= <= ==(比较运算)
# 条件判断
    if 条件1:
        满足条件1要执行的代码
    elif 条件2:
        满足条件2要执行的代码
    elif 条件3:
        满足条件3要执行的代码
    ...
    else:
        上面所有的条件都不满足要执行的代码
while循环
    while 条件:
        要循环的代码
循环不明白
n = 0
while n<5:    结束条件 条件不满足的时候就结束了
    print(n)
    n = n+1
# 一般情况下 永远是某一个语法自带一个:
# 这个:之后总是要缩进
# 你希望写在这个语法范围内的代码都要缩进

n = 0
while n <5:
    if n % 2 == 0:
        print('偶数 : ', n)
    else:
        print('奇数 : ', n)
    n = n+1

习题讲解

# 双色球
# 先让用户依次选择6个红球(红球的选择范围是1-32)
n = 0
s1 = ''
while n < 6:
    num1 = input('请输入红球的号码 :')
    num = int(num1)
    if num <= 32 and num >= 1:
        print('您选择了红球',num1)  '23' ,'24'
        n = n + 1
        if n < 6:
            s1 = s1 + num1 +','  '23,'+'24'+',' = '23,24,25,26,27,'
        else:
            s1 = s1 + num1    '23,24,25,26,27,'+'28'
    else:
        print('请选择1-32之间的数字')
m = 0
s2 = ''
while m < 2:
    num2 = input('请输入蓝球的号码 :')
    num = int(num2)
    if num <= 16 and num >= 1:
        print('您选择了蓝球', num2)
        m = m + 1
        if m<2:
            s2 = s2 + num2 + ','  # 除最后一个数字以外的拼接
        else:
            s2 = s2 + num2   # 最后一个数字的拼接
    else:
        print('请选择1-16之间的数字')
print('您选择的红球有 :',s1)
print('您选择的蓝球有 :',s2)

1.拾遗

pass语句
格式化输出
  # %s
  # '其他内容%s其他%s内容'%(变量,变量2)
运算符
  # 算数运算符 + - * / % //
  # 比较运算符 > < >= <= == !=
  # 赋值运算符(新)
      =
      +=
      -=
      *=
      /=
      %=
  # 逻辑运算符(新)
      and 与
      or  或
      not 非
      优先级 括号>not>and>or
  # 身份运算符(新) :判断的是两个变量的内存地址
      is
      is not
      # 如果两个变量的内存地址相等,值一定相等

2.编码

编码的种类 : ascii、gbk、unicode、utf8
UNICODE --> UTF8 'ABC'.encode('utf-8')
UNICODE <-- UTF8 b'\xe6\xe8\xe7'.decode('utf-8')

3.基本数据类型

bool int float
list
  # 索引
      # 正数 0~n
      # 倒数 -1~-m
  # 切片 有步长,步长可以省略,顾头不顾尾
      # [start:end:step]
      # [::] [:]
      # [:3]
      # [:3:1] [:3:2] [4:9]
      # [::-1] 完全反转列表
  # 增 append 向末尾添加值
  # 删 lst.remove('值') lst.pop()删掉列表的最后一个值
  #    lst.clear()    del lst[8]
  # 修改 lst[索引] = 新的值
  # 值的引用
  # 浅拷贝
通用的操作
  # in /not in
  # len(lst) 查看列表的长度
  # 获取列表中的每一个元素
      # for  break continue else
          # 都是循环一个固定的数据类型 —— 迭代的过程
      # while break continue else
          # 根据一个条件进行循环
str
  # 索引
  # 切片
  # 循环
  # 大小写的转换 upper
  # 分割和合并 split join
  # 替换 replace
  # 去掉边界上的内容 strip()   strip('<>')
  # 开始和结尾 startswith  endswith
  # 字符串的组成 isdigit
tuple 元组(元素1,元素2)
  # 不可变的序列
  # 可以切片
  # 可以循环
  # 可以使用索引查看
dict 字典 {'k1':'v1',123:'v2',(1,2):['alex','83']}
  # key有要求,不能是列表、字典也不能重复
  # 可以循环,并且循环取到的key
  # 增
      # d['不存在的key'] = 值
  # 删
      # d.pop('key')
      # del d['key']
  # 改
      # d['存在的key'] = 新的值
  # 查
      # d['存在的key']
      # d.get('不知道存不存在的key')
range
  # print(range(1,100))
  # for i in range(0,101,2):
  #     print(i)

3.pass

if 1==2:
    ...  # 什么也不做,只是占个地方,表示我是明白python的语法规则的

n = 0
while n<6:
    pass

4.格式化输出

name = input('name :')
traf = input('traffic :')
print('%s昨天开着%s撞树上了'%(name,traf))
print('昨天',name,'开着',traf,'撞树上')

username = input('username :')
print('welcome,%s'%username)

num1 = input('请输入一个红球 :')  # 20
num2 = input('请输入一个蓝球 :')  # 30
print('红球:%s,蓝球:%s'%(num1,num2))

print('数字:%s,%s'%('30',20))
print('数字:%s'%'20')
print('数字:%s'%20.20)
print('数字:%d'%20)   # digit
print('数字:%d'%'20')   # digit

5.运算符

print('='*20)
print('-'*20)
print('*'*20)
print('hello,'+'world')
s = 'hello,'+'world'
print(s)

a1 = input('红球1 :')
a2 = input('红球2 :')
print(a1 == a2)
print(a1 != a2)

赋值运算 =的优先级最低
a = 1+2-3*4/5

a = 0
a += 1   # a = a+1
a -= 1   # a = a-1

# 练习题:
a = 1
b = 2
a += b   # a = a+b = 1+2 = 3
b += a   # b = b+a = 2+3 = 5
print(a,b) # 3,5

a = 10
b = 6
a %= b  #a = a%b = 4
print(a>b)
print(a<b)
print(a,b)


# 逻辑运算符
# and 表示并且
    True and True == True
    True and False == False
# or 表示或者
    True or True = True
    True or False = True
    False or True = True
    False or False = False
# not 表示相反
    not True == False
    not False == True

a = 10
b = 5
a<b and b>3   # False and True = False
a<b or b>3   # False or True = True
not a<b      # not False = True

not a<b or a<b and b>3
# 括号的优先级最高
not
and
or

a = 10
b = 5
print(not a<b or a<b and b>3)
True or False and True
True or False
True


# 面试题可能会遇到
print(1 or 5)  # 1
print(0 or 5)  # 5
a or b # if a is True 结果是a 否则结果是b

print(1 and 5)  # 5
print(0 and 5)  # 0
# and和or的结果刚好相反 if a is False 结果是工,否则结果是b
print(3>4 and 5<7 or 8 and not False)
	  False  and  True  or 8 and True
           False  or True
        	 True
# 身份运算符, 对比内存地址是否相同
a = 1
b = 1
print(a==b)
print(id(a))
print(id(b))
print(a is b)
print(a is not b)

6.编码

# n进制   一位最多能表示0~(n-1)
    0101010101111001

print(100)
print(bin(100)) # 十进制转二进制
print(oct(100)) # 十进制转八进制
print(hex(100)) # 十进制转十六进制

print('hello world')
内存 :二进制
硬盘山

# 二进制         -->    23533334030232120
1010101010
print(bin(5))
0001011100000101
# 用固的长度
# A 65
#
# a 97
# {
# }
# [
# 0-255
# 8位2进制
# 11111111 -->255
# 00000000 -->0

# 0、1 1位  1bit   比特、位
# 8位 8bit  1byte  字节
# 1024字节  1kb
# 1024kb    1mb
# 1024mb    1gb
# 1024gb    1tb

# ascii码
# 中国 gb2312
# 万国码 unicode
# 中国 gbk
# utf8 可变长的编码

# 4个字节 4个字节表示一个文字
# 4*8 = 32位
# print(2 **32)
# 00000000 01010101 01010010 01010111
# 01110000 01010101 01010010 01010111
# 00000000 00000000 00000000 00001100

# utf8 可变长的编码
    # 英文字母 8位  1byte
    # 欧洲文字 16位 2bytes
    # 中国文字 24位 3bytes

# 编码使用在哪儿的?
    # unicode :程序的内存里的
        # print('你好,中国')
    # utf-8:存在文件里或者在网络上传输的时候
        # unicode ———> utf8

# 编码的转换
s = '你好,中国'
print(s.encode('utf-8'))  # unicode-->utf-8
b = b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\xad\xe5\x9b\xbd'
print(b.decode('utf-8'))

s = '你好,中国'
print(s.encode('GBK'))  # unicode-->utf-8
b = b'\xc4\xe3\xba\xc3\xa3\xac\xd6\xd0\xb9\xfa'
print(b.decode('gbk'))

7.列表

# 数据结构
# 列表list
lst = ['张晗','胡日查','老王','周老板','小强']


print(lst)
# 索引-下标  通过索引(下标)取值
print(lst[0])
print(lst[1])
print(lst[2])
print(lst[3])
print(lst[4])
print(lst[5]) # 报错 IndexError: list index out of range
print(lst[-1])
print(lst[-2])
print(lst[-3])
print(lst[-4])
print(lst[-5])



# 切片 [1~3)
print(lst[:])
print(lst[:2])
print(lst[2:])
print(lst[1:3])
print(lst[-3:-1:1])   # start:end:step
print(lst[-3:-1:1])
print(lst[-1:-3:-1])
print(lst[::-1])
print(lst[::2])
print(lst[1::3])

lst = ['张晗','胡日查','老王','周老板','小强']
lst2 = lst[:]
print(lst == lst2)
print(id(lst))
print(id(lst2))
# 列表的拷贝
lst3 = lst.copy()
print(lst)
print(lst2)
print(lst3)

# 列表的增 删 改 查
# 增
append
insert
lst = [1,2,3,4,5,6,7,8,9,'alex','老王',True,12.334]
l = lst.append('贡金敏')
print(lst)
lst.insert(0,'胡日查')
print(lst)
lst.insert(10,'周老板')
print(lst)

lst.remove(8)
print(lst)

n = lst.pop()
print(n)
print(lst)
n = lst.pop()
print(n)
print(lst)
lst.clear()
print(lst)
del lst[8]
print(lst)


# 改
lst = [1,2,3,4,5,6,7,8,9,'alex','老王',True,12.334]
a = 'alexsb'
lst[9] = a
print(lst)
lst[8] = 7+5

# 写一个列表,描述一个人
# [姓名,密码,年龄]
l2 = []
name = input('name :')
l2.append(name)
pwd = input('password :')
l2.append(pwd)
age = input('age :')
l2.append(age)
print(l2)

l = ['王剑', '6666', '20']
l2 = ['周老板', '123456', '50']
lst = []
lst.append(l)
lst.append(l2)
print(lst)

# 修改王剑的年龄 --> 22
lwang = lst[0]
lwang[2] = 22
print(lwang)
print(lst)

lst[0][2] = 22
print(lwang)
print(lst)

# 浅拷贝
l = ['alex',123,True,['王剑', '6666', '20'],['周老板', '123456', '50']]
l2 = l[:]
l3 = l.copy()

l2.append('hello,world')
print(l)
print(l2)
print(l3)

l2[3].append('hello kitty')
print(l)
print(l2)
print(l3)

import copy
l2 = copy.deepcopy(l)
l2[3].append('hello kitty')
print(l)
print(l2)
lst = [1,2,3]
l = ['alex',123,True]
l2 = ['alex',123,True]
l[2] = False
print(l)
print(l2)
#
lst = [1,2,3]
l = ['alex',123,True,lst]
l2 = ['alex',123,True,lst]
lst.append(4)
print(l)
print(l2)

l = ['wusir','alex','alex']
print(l.index('alex'))
print('alex' in l)
print('alex2' in l)
print('alex2' not in l)
print('alex' not in l)

# 练习题
    # 循环5次
    # 输入用户的名字,如果名字之前存在了,就提示已经存在
    # 如果这个名字之前未存在,把这个名字添加到列表中
    # 最后打印列表

n = 0
l = []
while n<5:
    name = input('username :')
    if name in l:
        print('您输入的用户名%s已经存在'%name)
    else:
        l.append(name)
        n += 1    # 只有当用户输入5个不重复的用户名程序才结束
print(l)


n = 0
l = []
while n<5:
    name = input('username :')
    if name in l:
        print('您输入的用户名%s已经存在'%name)
    else:
        l.append(name)
    n += 1    # 只要用户输入5个用户名,不管重复与否程序都结束
print(l)

l = [3,2,5,7,1,9,10]
l.sort()
print(l)

8.循环

l = [3,2,5,7,1,9,10,11,15,17]
print(len(l))   # length
n = 0
while n<len(l):
    print(l[n])
    n += 1

# 循环 for循环
for n in l:
    print(n)

# while循环和for循环的区别
# while循环是根据条件来的 结束循环的次数是不固定的
# for循环循环的次数永远等于你循环的那个列表/其他数据类型的长度

for i in l:
    if i ==10:
        break
    print(i)

for i in l:   # 迭代
    if i ==10:
        continue
    print(i)

# 小练习
l = [['alex','222'],['wusir','666'],['周老板','123456']]
# 让用户输入用户名和密码
# 只要用户名和密码对上了l中的值,显示登陆成功
# 否则,显示登陆失败

username = input('username :')   # wusir
password = input('password :')   # 123
login = False
for item in l:   # ['alex','222']  ['wusir','666']  ['周老板','123456']
    if username == item[0] and password == item[1]:
        print('登陆成功')
        login = True
        break
if login == False:
    print('登陆失败')


for i in [1,2,3,4]:
    print(i)
else:
    print('循环完啦')

for i in [1,2,3,4]:
    print(i)    # i=1  i=2  i=3  i=4
    if i == 3:
        break
else:
    print('循环完啦')

username = input('username :')   # wusir
password = input('password :')   # 123
for item in l:   # ['alex','222']  ['wusir','666']  ['周老板','123456']
    if username == item[0] and password == item[1]:
        print('登陆成功')
        break
else:  # 当for循环执行结束,并且在执行过程中没有被break,执行else中的代码
    print('登陆失败')

i = 0
while i<5:
    print(i)
    i = i+1
    if i == 3:
        break
else:
    print('执行完拉')

9.字符串

s = 'alex今天去洗脚城遇到了wusir'
# 字符串 就是一堆字符组成一串
# 索引的
s = 'alex今天去洗脚城遇到了wusir'
print(s[0])
print(s[-1])
print(s[10])
# 切片
print(s[0:4])
print(s[:4])
print(s[::-1])

# 字符串的循环
for char in s:
    print(char)

# 修改大小写
s = 'q'
print(s.upper())

# 让用户录入全班同学的名字
l = []
while True:
    name = input('同学的名字 :')
    if name.upper() == 'Q':
        break
    l.append(name)
    print('已添加%s同学'%name)
print(l)

s2 = 'Q'
print(s2.lower())


# 切割和合并
s = 'alex|alex3714|83'
l = s.split('|')
print(l)

s2 = '|'.join(['alex', 'alex3714', '83'])
print(s2)

# 替换 replace
s = 'wusir和wusir是一对儿好基友'
s1 = s.replace('wusir','老王')
print(s)
print(s1)
s2 = s.replace('wusir','老王',1)
print(s)
print(s2)

# 去掉边界上的内容 strip
s1 = '   wa    haha   '
print(s1.strip())

usr = input('user :').strip()
pwd = input('passwd :').strip()
if usr == 'alex' and pwd == 'alex3714':
    print('登陆成功')
else:
    print('登录失败')

s2 = '<娃哈哈>'
print(s2.strip('>'))
print(s2.strip('<'))
print(s2.strip('<>'))

s3 = 'hello,apple'
s4 = s3.strip('hello')
print(s4)

# 判断字符串的开始和结尾
s0 = '2019-9-10 17:02:22'
s1 = '2019-9-10 17:02:23'
s2 = '2019-9-10 18:02:22'
print(s0.startswith('2019-9-10 17:02'))
print(s1.startswith('2019-9-10 17:02'))
print(s2.startswith('2019-9-10 17:02'))

l = [s0,s1,s2]
for s in l:
    if s.startswith('2019-9-10 17'):
        print(s)

a = 'eating'
b = 'sleeping'
c = 'worked'
l = [a,b,c]
for word in l:
    if word.endswith('ing'):
        print(word)

#字符串的组成
num = input('红球的号码 :')
print(type(num))
if num.isdigit():
    num_int = int(num)
    print(type(num_int))
else:
    print('请输入数字来确保程序正常运行')

# 判断这个字符串是不是完全由数字组成
s1 = '12345'
s2 = 'abc123'
print(s1.isdigit())
print(s2.isdigit())

s1 = '12345'
s2 = 'abc你好壹仟'
print(s1.isalpha())
print(s2.isalpha())


s = '菠萝蜜苹果香蕉'
print('香蕉' in s)
print('菠萝蜜' in s)
print('菠萝' in s)

l = ['菠萝蜜','苹果','香蕉']
print('香蕉' in l)
print('菠萝蜜' in l)
print('菠萝' in l)

s = 'alex菠萝蜜苹果香蕉'
print(len(s))


# 修改和赋值上的问题
a = 'alex'
b = a
a = 'wusir'
print(b)

10.元组

days = ('星期一','星期二','星期三','星期四'
        '星期五','星期六','星期天')
print(days[0])
print(days[0:3])
for day in days:
    print(day)

day[6] = '周日'

a = (1,)
print(a)

# 数据类型之间的转换
lst = [1,2,3,4]
tup = tuple(lst)
print(type(tup))
print(tup)

lst2 = list(tup)
print(tup)
print(lst2)

# 练习:
tup = (1,2,3,4)
lst = list(tup)
print(lst)
lst.append(5)
print(lst)
t =tuple(lst)
print(t)
print(tup)
tup = t
print(tup)

11.字典

d = {
 'alex':'alex3714',
 'wusir':'666',
  'alex10000':'222222'
 }
print(d['alex'])
print(d['alex10000'])


# 登录
username = input('username :')
password = input('password :')
if username in d and d[username] == password:
    print('登录成功')
else:
    print('登录失败')

d = {
 'alex':'alex3714',
 'wusir':'666',
  'alex10000':'222222'
 }
username = 'alex'
d[username]  # d['alex']
'alex':'alex3714'  k-v
k-v
# 永远是通过key找value

# 增
d['老王'] = '999'
print(d)
d['老王'] = '感冒灵'
print(d)
# 删
d.pop('alex')
print(d)

del d['alex']
print(d)
# 改
d['wusir'] = '777'
# 查
print(d['wusir'])
print(d)

# 字典的key是有要求的
 # 不能重复写两个key
 # key必须是可hash的:
    # 可以通过一个哈希算法计算出一个变量的哈希值
    # 不能做字典的key :list dict set
d = {'alex':84,'alex':73,123:['a','b'],(1,2,3):{'k':'v'}}
d['alex'] = 125
print(d)

# 字典的循环
for i in d:
  print(i,d[i])


d = {'k1':'v1'}
print('k1' in d)
print('v1' in d)
# d['k2']  # KeyError: 'k2'
print(d.get('k1'))
print(d.get('k2'))

12.补充

# bool值
# 数字 0 False
    # 非0 True
# 字符串 '' False
    # 非空 True
[] tuple() {} --> False
None --> False

lst = []
if lst:
    print(lst)
else:
    print('列表为空')

练习题

1、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=[‘alex’, ‘eric’, ‘rain’]

2、查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素。

  1. li = [“alec”, " aric", “Alex”, “Tony”, “rain”
  2. ``tu = (“alec”, " aric", “Alex”, “Tony”, “rain”
  3. ``dic = {‘k1’: “alex”, ‘k2’: ’ aric’, “k3”: “Alex”, “k4”: “Tony”}

3、写代码,有如下列表,按照要求实现每一个功能

li=[‘alex’, ‘eric’, ‘rain’]

    • 计算列表长度并输出
    • 列表中追加元素“seven”,并输出添加后的列表
    • 请在列表的第1个位置插入元素“Tony”,并输出添加后的列表
    • 请修改列表第2个位置的元素为“Kelly”,并输出修改后的列表
    • 请删除列表中的元素“eric”,并输出修改后的列表
    • 请删除列表中的第2个元素,并输出删除的元素的值和删除元素后的列表
    • 请删除列表中的第3个元素,并输出删除元素后的列表
    • 请删除列表中的第2至4个元素,并输出删除元素后的列表
    • 请将列表所有的元素反转,并输出反转后的列表
    • 请使用for、len、range输出列表的索引
    • 请使用enumrate输出列表元素和序号(序号从100开始)
    • 请使用for循环输出列表的所有元素

4、写代码,有如下列表,请按照功能要求实现每一个功能

  1. li = [“hello”, ‘seven’, [“mon”, [“h”, “kelly”], ‘all’], 123, 446]
    • 请根据索引输出“Kelly”
    • 请使用索引找到’all’元素并将其修改为“ALL”,如:li0[9]…

5、有如下变量,请实现要求的功能

  1. tu = (“alex”, [11, 22, {“k1”: ‘v1’, “k2”: [“age”, “name”], “k3”: (11,22,33)}, 44])
    • 讲述元组的特性
    • 请问tu变量中的第一个元素“alex”是否可被修改?
    • 请问tu变量中的”k2”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”
    • 请问tu变量中的”k3”对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素“Seven”

6、转换

    • 将字符串s = “alex”转换成列表
    • 将字符串s = “alex”转换成元祖
    • 将列表li = [“alex”, “seven”]转换成元组
    • 将元组tu = (‘Alex’, “seven”)转换成列表
    • 将列表li = [“alex”, “seven”]转换成字典且字典的key按照10开始向后递增

7、元素分类

有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。

即:{‘k1’:大于66的所有值, ‘k2’:小于66的所有值}。(编程题)

li = [-100, 1, 3, 2, 7, 6, 120, 121, 140, 23, 411, 99, 243, 33, 85, 56]
tu = {'k1': [], 'k2': []}
for item in li:
    if item > 66:
        tu['k1'].append(item)
    else:
        tu['k2'].append(item)
print(tu)

8、在不改变列表数据结构的情况下找最大值li = [1,3,2,7,6,23,41,243,33,85,56]。(编程题)

a = 0
for i in li:
    if i > a:
        a = i
print(a)

9、在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]。(编程题)

li = [-100, 1, 3, 2, 7, 6, 120, 121, 140, 23, 411, 99, 243, 33, 85, 56]
max_num = li[0]		# 假设最大值
mix_num = li[0]		# 假设最小值
for n in li:
    if n > max_num:
        max_num = n		# 迭代列表找出最大值
    if n < mix_num:
        mix_num = n		# 迭代列表找出最小值
vag_num = (max_num + mix_num) / 2	# 算出最大值和最小值的平均值
closer = vag_num - li[0]	# 假设最接近平均值的数,差值
if closer < 0:			# 如果差值小于0,则取它的绝对值
    closer = - closer
aim = li[0]				# 假设目标值
for i in li:
    divn = vag_num - i	# 取值列表中各值与平均值的差值
    if divn < 0:
        divn = -divn	# 如果差值小于0则取绝对值
    if divn < closer:
        closer = divn	# 如果差值小于假设的差值,对差值重新赋值
        aim = i			# 找出目标值
print(aim, closer)		# 打印目标值与差值

10、利用for循环和range输出9 * 9乘法表 。(编程题)

for i in range(1, 10):
    for j in range(1, 10):
        if i > j:
            continue
        print('{}*{}={}'.format(i, j, j*i))

11、求100以内的素数和。(编程题)

12、请说明python2 与python3中的默认编码是什么?

13、为什么会出现中文乱码?你能列举出现乱码的情况有哪几种?

14、分别写出在windows和mac上用py2输出中文怎么做?

15、任一个英文的纯文本文件,统计其中的每个单词出现的个数,注意是每个单词。

# 方法一:
dic = {}
with open('file.txt', encoding='utf-8') as f:
    content = f.read()
    ch = ''
    for char in content:
        if char.isalpha():
            ch += char
        else:
            if ch in dic:
                dic[ch] += 1
            else:
                dic[ch] = 1
            ch = ''
print(dic)

# 方法二
def count_words(file):
    dic = {}
    with open(file, encoding='utf-8') as f:
        content = f.read()
        ch = ''
        for char in content:
            if char.isalpha():
                ch += char
            else:
                if ch in dic:
                    dic[ch] += 1
                else:
                    dic[ch] = 1
                ch = ''
    return dic


ret = count_words('file.txt')
print(ret)

13.作业

# 一、利用字典实现用户认证功能,字典格式如下
userinfo = {'alex':'alex3714','wusir':'666'}
# 要求:
# 1)用户可以选择操作,登录或者注册
# 2)如果是登录,要求输入正确的用户名和密码,超过三次则登录失败
# 3)如果是注册,要求用户输入用户名,密码,确认密码,完成注册之后进入用户登录功能


userinfo = {'alex': 'alex3714', 'wusir': '666'}

n = 1
while n <= 3:
    print('请选择你的操作:1:用户登录  2:用户注册  Q:退出')
    choice = input('>>>:')
    if not choice:
        print('选项不能为空')
        continue
    elif choice.upper() == 'Q':
        break
    elif choice == '1':
        username = input('输入用户名,(Q/q)退出:').strip()
        if not username:
            print('输入不能为空,重新输入')
            continue
        elif username.upper() == 'Q':
            break
        password = input('输入密码:').strip()
        for item in userinfo:
            user, pwd = item, userinfo.get(item)
            if username == user and password == pwd:
                print('登录成功')
                break
        else:
            print('用户名或密码错误。')
    else:
        username = input('输入新用户名,(Q/q)退出:')
        if not username:
            print('用户名不能为空,重新输入。')
            continue
        if username.upper() == 'Q':
            break
        password = input('输入你的密码:')
        userinfo[username] = password
        print('用户{username}创建成功!')



# 2.三级菜单
menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}

stack = [menu]
while stack:  # 只要列表不为空,就执行while循环中的代码
    for k in stack[-1]:  # 取列表中的最后一项menu,循环menu
        print(k)  # menu中的每一个key :北京 上海 山东
    inp = input('>>>').strip()  # 让用户输入内容
    if inp in stack[-1]:  # 如果输入的内容在字典里menu
        stack.append(stack[-1][inp])  # 把menu['北京']对应的字典放到stack里 stack = [menu, menu['北京']]
    # 如果用户输入的内容是b或者B:返回上一级
    elif inp.upper() == 'B':
        stack.pop()
    # 如果用户输入的内容是q或者Q:直接结束整个程序
    elif inp.upper() == 'Q':
        stack.clear()

7-16分享

1、值语义和引用语义在Python中使用是是引用语义,传递的所有内容都是传递了 “值” 的内存地址:
整个语言办有两种语义,不同的语言在使用值或者是赋值的时候用的到底是什么
a = 1
b = a
值语义的过程中,相当于这两个a,b的值都是1;
引用语义的过程中,相当于a指向1的地址,b和a一样也是指向a的址址
在python中,所有的地方都采用“引用语义”
	在python中传递的所有内容都是传递了某一个值的内存地址

a = [1,2,3]
b = a
a和b指向的同一个地址,是同一个列表
如果修改了a,那么b也会跟着变

a = [1,2,3]
b = a   a的内存地址赋值给b,这个时候a和b指向同一块内存地址


2、可变数据类型和不可变数据类型
不可变数据类型:如果变量表示的值发生了改变,并不是说在它引用的内存地址中的值变化了,而是它引用了另外一个值的地址
	int
    	a = 1
        a = a + 1
        a = 2
     str
     tuple
     frozenset  # 不可变的集合(冷冻的集合)
可变数据类型:容器,就是一个变量指向的地址是固定的,但是这个地址中的值可以变化(增 删 改)
	list
    	l = [1,2,3]
        l.append(4)
        print(l)	# l = [1,2,3,4]
     dict
     set (集合)
        
        
3.列表的扩展方法
	index
    extend
    append

4.str的扩展方法
	count
    index
    find
    
5.三次登录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值