《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,或者和其他数据结构结合,这就是看要求的问题了。

结语:疫情严重,大家老老实实家里待着学习或者远程办公(😂),我也想出门

 

posted @ 2020-02-09 11:01  C`Moriarty  阅读(313)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */ /*鼠标跟随效果*/