第三题
Topic sourcet = [1, 2, 3, -1, 1, 2, 3]
for k in t:
# 这里应该是理解错了,for k in t 其实是循环 t中的全部元素,k分别会是 1, 2, 3, -1, 1, 2, 3而不是索引
if t[k] == -1:
# 但是比较巧合的是,元素值是3的时候,正好可以索引到-1,所以说可以通过测试,稍微移动一下小数点就会发现,没有办法通过测试 str2float('1233.21') => 123321.0
q = len(s) - k - 1
# 应该改成
for index, k in enumerate(t):
if t[index] == -1:
q = len(s) - index - 1
非常感谢朋友指正! 修改代码如下:
def str2float(s):
def fn(x, y):
if y > 0: a = 10 * x + y
else: a = x
return a
def char2num(s):
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '.': -1}
return DIGITS[s]
t = list(map(char2num, s))
for index, k in enumerate(t):
if t[index] == -1:
q = len(s) - index - 1
p = reduce(fn, map(char2num, s)) / pow(10, q)
return p
#测试
print('str2float(\'1233.21\') =', str2float('1233.21')) #输出:str2float('1233.21') = 1233.21
- 1
ミサ
方法有点笨,但测试通过了