# !/usr/bin/env python3 # -*- coding: utf-8 -*- from functools import reduce import sys def str2float(s): def flt(s): """ 筛选出整数部分和小数部分,分别返回字符串,整数和小数部分""" index_dot = 0 #初始化小数点位置指针 默认0 judge_dot = '.' in s #判断字符串中是否有小数点 True or False dot_nums = 0 #初始化小数点个数 默认0 for x in s: """判断字符串是否存在多个小数点,如果是则提示,并退出。""" if dot_nums >1: print('字符串有多个小数点,无法转化!') sys.exit() elif x == '.': #判断是否迭代到小数点,并累加。 dot_nums += 1 for x in s: """将字符串筛选出整数部分和小数部分,返回各部分字符串""" if judge_dot == False: #判断如果字符串中没有小数点,直接返回整数部分字符串。 int_part = s return int_part elif x == '.': #迭代到'.'后得出该点的index,配合slice筛选出整数和小数部分字符串 int_part = s[:index_dot] float_part = s[index_dot+1:] return int_part, float_part else: index_dot += 1 return None def strs2nums(s): DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} return DIGITS[s] def format_int(x,y): return x*10 + y int_part_str, float_part_str = flt(s) int_part = reduce(format_int, map(strs2nums, int_part_str)) float_part = reduce(format_int, map(strs2nums, float_part_str))*0.1**len(float_part_str) return int_part + float_part
Sign in to make a reply
表面不约谁信