任务
用多行Unicode字符串表示下面的唐诗并打印:
静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
-
?不会了怎么办
-
参考代码:
print u'''静夜思 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。'''
-
整数,浮点数
-
整数与整数计算仍然是整数
-
整数与浮点数计算是浮点数
-
浮点数与浮点数计算是浮点数
-
为什么区分整数还是浮点数:sss
-
整数是准确的二浮点数化为二进制数可能会无线循环,如0.1,
-
一布尔类型
-
布尔类型的 and or not 计算
-
a=true
-
print a and 'a=true' and 'a=false'
-
结果是a=true
-
原因:python 把 空字符串,0,none看成false
-
其他都看成是true
-
根据短路计算: a and b时 当第一个是false不管第二个怎么计算都是false,所以使用a
-
当第一个是true,那么结果取决于第二个,所以使用b
-
同理a or b 第一个是true 不管第二个怎么计算都是true 使用a
-
第一个是false 那么结果取决于b 所以使用b
-
二 list : 很简单 就是L[]方括号 索引 L[0],L[1],L[2]从零开始 切记不要越界
-
也能从后开始查,如L[-1],L[-2],L[-3]
-
在List中加入元素,用两个方法append,insert.
-
append直接把元素放到L末尾
-
insert把元素放到L任何位置,使用insert(index,elem)
-
任务
注意右边编辑器代码中 list 如下:
L = ['Adam', 'Lisa', 'Paul', 'Bart']
Paul的索引是2,Bart的索引是3,如果我们要把Paul和Bart都删掉,请解释下面的代码为什么不能正确运行:
L.pop(2) L.pop(3)
怎样调整代码可以把Paul和Bart都正确删除掉?
-
?不会了怎么办
-
当首先删除索引为 2 的Paul时,L变成了:
['Adam', 'Lisa', 'Bart']
这时,注意到Bart的索引已经从原来的3变成2了!
参考代码:
L = ['Adam', 'Lisa', 'Paul', 'Bart'] L.pop(3) L.pop(2) print L
-
tuple 不能被修改,删除,添加,一旦做完就无法修改 定义用() list用【】而且必须要有 ","
-
tuple 在特殊情况下 可变,如('aa','dd',['dsad','dsa'])
-
python中if,for while 没有()只有:+四个空格缩进,注别用tab键
-
if中软还有其他if else 在PYTHON中药用到elif 同样要缩进4个空格
-
break 退出本个循环,continue 退出本次循环
-
dict 类似于java中的 map,同理也是集合使用函数len()可以算出其大小
-
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:
-
访问不光可以通过dict[key]的方法,还可以通过dict.get(key)如果没有这个key 返回的是none
-
dict的更新直接用dict[key]更新,
-
set类似于java的set 无序,不重复 使用 elem in set 返回的是否是true 来判断是否有这个元素
-
set的更新和list类似,set 用add(), remove()删除add()可以直接用,remove()需要判断,是否有这个序列
-
函数用 def +函数名+:编写, 函数可以传递多个参数,同理也可以返回多个参数,但是返回的返回值,你用print 打印出来是tuple,所以
-
之前你看到的多个返回值都是假象,实际上是通过tuple 返回出来的
-
def move(n, a, b, c): if n ==1: print a, '-->', c return move(n-1, a, c, b) print a, '-->', c move(n-1, b, a, c) move(4, 'A', 'B', 'C')
默认的形参与JAVA不同,JAVA一般在构造中写,而 其实在引入的时候写 -
如def mama(age=40,sex='女') 这让我深深的怀念起了C语言~~ 猫叔一定是C出身
-
python 的形参是可变的 +*号 , 其实类似于JAVA将一个类或者集合传进函数
-
切片: 切片其实是更方便的一种遍历(python的遍历越学越方便)
-
list(m:n:t),m是从M开始,n是遍历n个,t每隔t个遍历一下(起始点也需要遍历)此外还可以倒序遍历如之前的list[-m],
-
list(-m:n:t) 从倒数M开始遍历
-
set同理
-
福利:字符串也可以进行切片操作
-
现在开始讲真正的迭代
1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict
-
引索迭代 enumeranate 其实就是JAVA中的枚举,不吐槽原理:把每个elem 与一个index通过tuple绑定到一起
-
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
迭代 dict中的 value 我们用老方法 需要先迭代出KEY 如今 可以新方法 values 或者 intervalues(效率高) -
当要迭代出 [key,value]时候 需要 使用 items 或者 interitems
-
生成列表:python很神奇的地方,应该用法很方便。
-
print [x*(x+1) for x in range(1,100,2)] 这样便生成 一个list 等同于
-
L[]
-
for x in range (1,100,2)
-
L.append x(x+1)
-
还可以添加if 判断 还可以多重循环
-
例子:print [a*100+b*10+c for a in range(1,10) for b in range(0,10) for c in range(1,10) if a==c]
-
复杂表达式
-
使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。
假设有如下的dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()] print '<table>' print '<tr><th>Name</th><th>Score</th><tr>' print '\n'.join(tds) print '</table>'
注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。
把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:
<table border="1"> <tr><th>Name</th><th>Score</th><tr> <tr><td>Lisa</td><td>85</td></tr> <tr><td>Adam</td><td>95</td></tr> <tr><td>Bart</td><td>59</td></tr> </table>
-