-
age = 8 if age >= 6: print 'teenager' elif age >= 18: print 'adult' else: print 'kid'
当 age = 8 时,结果正确,但 age = 20 时,为什么没有打印出 adult?
如果要修复,应该如何修复?
特别注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。
首先执行了if age >= 6: print 'teenager'
满足条件时则不再往下执行正确应该这样
age = 8 if age >= 18: print 'adult' elif age >=16 : print '年轻人' else: print 'kid'
查看全部 -
数列List
方法 append() 将新元素添加到List后面
方法 insert() 索引加新元素 将新元素添加到索引上
查看全部 -
5-3 Python之 if-elif-else
有的时候,一个if..else..还不够用。比如,根据年龄的划分:条件1:18岁或以上:adult
条件2: 6岁或以上:teenager
条件3: 6岁以下:kid
我们可以用一个if age >= 18 判断是否符合条件1,如果不符合,在通过一个 if 判断 age >= 6 来判断是否符合条件2,否则,执行条件3:
if age >= 18:
print 'adult'
else:
if age >= 6:
print 'teenager'
else:
print 'kid'
else:
print 'baby'
这种写出来,我们就得到一个两层嵌套的if。。else。。语句,这个逻辑没有问题,但是,如果继续增加条件,比如3岁以下是baby:
if age >= 18:
print 'adult'
else:
if age >= 6:
print 'teenager'
else:
if age >= 3 :
print 'kid'
else:
print 'baby'
这种缩进智慧越来越多,代码也会越来越难看。
要避免嵌套架构的if。。else。。,我们可以用 if ...多个 elif...else...的结构,一次写完所有的规则:
if age >= 18:
print 'adult'
elif age >=6:
print 'teenager'
elif age >= 3:
print 'kid'
else:
print 'baby'
elif意思就是 else if。这样一样,我们就写出了结构非常清晰的一系列条件判断。
特别注意:这一系列条件半段会从上到下依次判断,如果某个判断为了True,执行完对应代码块,后面的条件判断就直接忽略,不在执行。
查看全部 -
and 找 False
or 找 True
查看全部 -
复杂表达式
使用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>
任务
在生成的表格中,对于没有及格的同学,请把分数标记为红色。
提示:红色可以用 <td > 实现。
?不会了怎么办
如果我们用一个函数来替换字符串的格式化代码,可以得到更清晰的代码:
def generate_tr(name, score): return '<tr><td>%s</td><td>%s</td></tr>' % (name, score) tds = [generate_tr(name, score) for name, score in d.iteritems()]
这样,只需要修改 generate_tr() 函数,必要的时候把score标红。
参考代码:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } def generate_tr(name, score): if score < 60: return '<tr><td>%s</td><td >%s</td></tr>' % (name, score) return '<tr><td>%s</td><td>%s</td></tr>' % (name, score) tds = [generate_tr(name, score) for name, score in d.iteritems()] print '<table border="1">' print '<tr><th>Name</th><th>Score</th><tr>' print '\n'.join(tds) print '</table>'
查看全部 -
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
>>> for key, value in d.items(): ... print key, ':', value ... Lisa : 85 Adam : 95 Bart : 59
查看全部 -
如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.itervalues() # <dictionary-valueiterator object at 0x106adbb50>for v in d.itervalues(): print v # 85 # 95 # 59
查看全部 -
但其实这只是一种假象,Python函数返回的仍然是单一值:
>>> r = move(100, 100, 60, math.pi / 6) >>> print r (151.96152422706632, 70.0)
用print打印返回结果,原来返回值是一个tuple!
但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
查看全部 -
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values() # [85, 95, 59]
查看全部 -
(1) 向set中添加元素:s.add(key)
(2) 删除set中的元素: s.remove(key)
(3) 删除不存在的元素会报错,所以删除前需要判断:if key in s: s.remove(key)
查看全部 -
(1) 由于set存储的是无序集合,所以我们没法通过索引来访问。
(2) 访问 set中的某个元素实际上就是判断一个元素是否在set中。
查看全部 -
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')]
查看全部 -
(1) set格式: s = set(['a','b'])
(1) set是无序的
(2) set不能包含重复的元素
查看全部 -
获取字典中value的两种方法:
(1) d['key']
(2) d.get('key')
判断某个key是否存在于字典中:
for ‘key’in d
查看全部 -
利用倒序切片对 1 - 100 的数列取出:
* 最后10个数;
* 最后10个5的倍数
L = range(1, 101)
print L[-10:]
print L[4::5][-10:]
查看全部
举报