《Python编程,从入门到实践》- 03 字典&输入&while循环
Posted C·Moriarty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python编程,从入门到实践》- 03 字典&输入&while循环相关的知识,希望对你有一定的参考价值。
祝大家新年快乐?
好久没更blog了,真的不是我懒,我有好好学习的,比方说《Python编程,从入门到实践》这本书其实我已经看完了,《Fluent Python》我也看的差不多了,至于《高性能MySQL》看了一半了,实在太难了。
没错,其实我只是没有写blog的习惯(捂脸)
字典
先来看个例子
alien_0 = {‘color‘: ‘green‘, ‘points‘: 5} # 这个就类似于 集合中的 map,key不能重复,value可以
字典,可以理解为 key-value 的键值对使用方法如下
print(alien_0[‘color‘]) print(alien_0[‘points‘]) # 打印内容
变量名[key] 就可以拿到你设定的value值
简单的对字典操作方法如下:
# 添加和修改 alien_0[‘color‘] = 1 # 这个操作是合法的,可以替换不同类型的变量 alien_0[‘name‘] = ‘alice‘ # 需要新增的时候只需要简单的指出就行 print(alien_0[‘color‘]) print(alien_0[‘name‘]) # 删除 del alien_0[‘name‘] # 遍历方式类似于其他语言,都是通过迭代器 # 这个map操作应该是O(1)的复杂度,也就是说,它的存储也不是按顺序的。 for key, value in alien_0.items(): print(key, value)
字典的查询是很快的,它的原理大底和数据结构里的map(也有些称为字典的)相似。可能就是散列函数不同
所以,熟知其他语言中这个数据结构的人,很快就注意到了-是否可散列 的问题。
举个简单的例子,key-value,key是一个可变对象,不可散列。那么你第一次存储进去的时候,hash值可能是hash1。
然后你改变了这个key,它的hash值可能就变成了hash2,这时你再去查 obj[key] 的时候可能存在找不到的情况
关于散列的部分,我们在《Fluent Python》里再说,新手记住key尽量使用不可变对象就行了。
遍历字典的方法如下:
# for key in alien_0.keys() 仅获得 key # for key in alien_0.values() 仅获得 value print() for ele in sorted(alien_0.values()) : # 可以.keys() 去按照key排序,也可以按照值排序, print(ele)
到这里,其实只是按书上的节奏走,我其实有个问题,既然存在类似于map的东西,那肯定存在于类似于set的,是的,确实有set函数,之后再说,有兴趣的可以自行查阅
嵌套
理论上来说,map中的key,前面也说了,key必须得是可散列的(但是即便你用了不可散列的对象,它也是不会报错的,要十分注意)
value便是可以为任何对象,那么value也可以为map,这就是所谓的嵌套
# 通俗来说类似于java中的Map<Object, Map<Object, Object>> people = { "alice": { "address": "A", "tel": "123456" }, "Tom": { "address": "B", "tel": "654321" } } # 其余的嵌套就是换对象,不论是List里套Map还是Map里套List
输入
这里要说的输入主要是控制台输入,之后会说文本,至于RPC之类的,等以后再说
函数input() 让程序暂停,然后等你输入,获取你的输入后将其存到一个变量里
message = input("please input a message: ") # 括号里面的内容其实只是个引子,它不是message的一部分,准确的说是提示的方式 print(message) # 真正获取到的值其实是你输入的内容,以回车结尾,可以读取空格,也就是说读取一行 message2 = input("please input the next message: ") # 第一个的回车不会被吃掉 print(message2) age = input("please input your age:") # 因为是按行读取所以说,读取到的内容都是按字符串去处理的 print(age) age = int(age) # int() 函数 可以把字符串转为数字,前提是这个字符串是符合数字规定的。 if (age >= 18) : print("ok")
简单说明一下,第三四行代码
在c语言中也存在着读取一行式的输入,python也是读取一行式,会读取空格,非遇空格停止
那么用过c语言,可能遇过这个问题,如果在第一次输入后,出现的输入是字符型输入,那么会遇到吃回车的情况
清空缓冲区或者使用无缓冲区模式可以解决,我就是为了测试这个。
python中大家应该可以放心使用
其实若不是为了测试,一般是用不到控制台输入的。
关于输入转化我发现个有趣的事:
num = int(" 1200000000000000000000000000000000000000000000000000000000000000000000000000000000003 ") # 我的电脑上这个是合法的,首尾是允许有空格的,中间不允许 if (num >= 18): # 并且是可以拿去比较的,我不知道这个转化是否是没有限制的,还是它实际的后台还是当字符串处理了 print("ok")
我不太清楚python中的int是否是有限制的,看似应该没有,那就应该取决于内存大小了
while循环
# while循环 i = 0 while i < 5: if i == 0: i += 1 continue # continue 和 break 的用法和其他语言一样 print(i) if i == 3: break i += 1 # python 中好像不支持 i++ 这种写法
i < 5 为循环条件,先检查循环条件,后执行循环,至于要怎么使用while,或者和其他数据结构结合,这就是看要求的问题了。
结语:疫情严重,大家老老实实家里待着学习或者远程办公(??),我也想出门
以上是关于《Python编程,从入门到实践》- 03 字典&输入&while循环的主要内容,如果未能解决你的问题,请参考以下文章