Discuss / Python / 第三题

第三题

Topic source

ミサ

#1 Created at ... [Delete] [Delete and Lock User]

方法有点笨,但测试通过了

    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]
    k = 0
    q = 0
    t = list(map(char2num, s))
    for k in t: 
        if t[k] == -1:
            q = len(s) - k - 1
    p = reduce(fn, map(char2num, s)) / pow(10, q)
    return p

莫非

#2 Created at ... [Delete] [Delete and Lock User]
t = [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

ミサ

#3 Created at ... [Delete] [Delete and Lock User]

非常感谢朋友指正! 修改代码如下:

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

Reply