利用map
和reduce
编写一个str2float
函数,把字符串'123.456'
转换成浮点数123.456
:
from functools import reduce
def str2float(s):
def num(s):
return {"1": 1,"2": 2,"3": 3,"4": 4,"5": 5,"6": 6,"7": 7,"8": 8,"9": 9}[s]
def fn(x, y):
return 10*x + y
n = s.index(".")
sum1 = reduce(fn, map(num, s[:n]))
sum2 = reduce(fn, map(num, s[n+1:]))
return sum1+sum2*10**(-len(s[n+1:]))
print('str2float(\'123.456\') =', str2float('123.456'))
埃拉托色尼筛选法,关于生成器和filter的使用。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def _odd_iter():
n = 1
while True:
n = n+2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
for n in primes():
if n < 1000:
print(n)
else:
break
回文数的时候学到了一些关于切片的新的知识。L[:10:2]表示前十个数每两个取一个,L[::5]表示前所有数每五个取一个。前面的两个冒号表示的是取数的范围。L[::-1]则可以表示把这个序列刚好颠倒过来,这样的话判断回文数的时候就会非常的方便。
装饰器草草的看了一下。感觉有点抽象没=没有深入理解和做课后的习题。