条件判断
if
语法如下:
如果if 后的case成立,那么执行下方缩进语句块的代码,否则执行else下面的缩进语句的代码。并不需要用{ }来控制执行的代码,缩进结束,那么需要执行的代码也就结束了。需要注意 : 号,不能遗漏
C中的else if 在这里被替换成了 elif,语法含义一样,使用方式相同。
case(判断条件)可以简写为
if x:
python解释器会默认解释为判断True or False
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
转换input
前面提到过一句话:input输入的变量均为str类型,因此,当我们需要比较整数大小等情况就需要用的类型的转换。
一个数是不是字符串怎么显示呢?上一节说的list和tuple,如果打印列表,字符串元素是带引号的,来看看输入和转换后的input。
很明显可以看到input的内容为str类型,且类型的转换可以在input时候就进行。
a = int( input ( ) )
循环
for x in source 循环
source可以是一个list或tuple,for每执行一次,就把source里的元素赋值给x,循环一次,索引向后移动一位。
罪过罪过,输出格式化字符%后用 ( ) 而不是 [ ]
这里还提到了一个函数:range(),作用是生成一个整数序列。但是它徐涛通过list()函数转换为一个list,不能直接list_name = [range() ]。
用了 list() 函数后,就直接转为了一个list。
如果想计算10的阶乘,for in 函数可以直接调用range,无须转化
注意,range(x)函数内的数是从0开始,到x-1结束(x>=1)
比如range(5)= 0,1,2,3,4
break + continue
break可以提前退出循环。
continue可以跳过此次循环。
这里break是结束的是上一级循环,并非结束整套(多个循环嵌套)。
这里做了一个小测试,第一个for in 很好理解,就是结束整个for in
要是有多个for in,就像第二个函数呢?什么时候结束?
是不是当 a>100时候,for x ...和 for y...都会结束?
当然不是。当 a>100时候,结束的是 for y..循环。结束之后,返回再次指向for x..,for x...什么时候结束呢?range(50)循环完结束,所以有了x=49,y=3的答案。可以来看看过程。
刚刚写了一个错误的continue
位置错误,continue做的是无用功。
计算0~50偶数和
dict
存储方式= key + value
关键字 + 对应的值。
这里说到用dict查找的速度是非常快,原因是因为:
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict就是第二种实现方式,给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。
参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143167793538255adf33371774853a0ef943280573f4d000
有点疑惑的是dict在内部计算出key的位置,是如何计算的?
python中的dict对象也即PyDictObject对象,因为对搜索的效率要求很高,所以选择了散列表(hash table),因为在最优情况下,散列表能够提供O(1)的搜索效率
参考:https://www.cnblogs.com/keke-xiaoxiami/p/8329779.html
现在来看一下语法:
dict_name = {key:value,key:value,key:value}
value = dict_name[key]
dict的值value可以改变,直接赋值就好
dict_name[key] = new value
判断一个key存不存在可以用 in 或 get方法
--头疼 居然没有保存。。。。。重新写一下吧--
方法in 仅会返回 True or False
'key' in dict_name 存在返回True 不存在返回False
而get可以自定义返回内容。
语法:dict_name.get(key) 存在返回1,不存在返回none
dict_name.get(key,return_value) 存在返回1,不存在返回return_value
value的更新
直接赋值即可。dict_name[key] = new_value
dict的删除
可以使用pop,同list类似,但稍有区别。
dict的pop必须指定key,否则就会报错。而list若不指定key,那么默认删除最后一个元素
语法:dict_name.pop(key)
list:内存小,查找速度和元素多少有关
dict:内存较大,查找速度快,不会随着元素的增加而变慢
dict里不能存在相同的key,创建时候可以这样写,但是多个相同的key,都会被舍弃,仅保存最后一个
set
也是key的集合,但是没有value
语法:set_name = set( [] )
必须要用一个list来作为输入集合,同样,不能存在相同的key。和dict不同的是,没有value值,所以key相同的话会被过滤,仅保存一个。
set添加元素
语法:set.add(key) x相同key依旧会被过滤
set移除元素
语法:set.remove(key)
可以还有一些特殊的用法,可以做到计算交集、并集等
list: a = [1,2,3]
tuple:a = (1,2,3)
dict: a = {'a':1,'b':2,'c':3}
set: a = set( [] )