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结尾的所有元素。
- li = [“alec”, " aric", “Alex”, “Tony”, “rain”
- ``tu = (“alec”, " aric", “Alex”, “Tony”, “rain”
- ``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、写代码,有如下列表,请按照功能要求实现每一个功能
- li = [“hello”, ‘seven’, [“mon”, [“h”, “kelly”], ‘all’], 123, 446]
-
- 请根据索引输出“Kelly”
-
- 请使用索引找到’all’元素并将其修改为“ALL”,如:li0[9]…
5、有如下变量,请实现要求的功能
- 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.三次登录