Discuss / Python / 作业3

作业3

Topic source
# !/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

  • 1

Reply