Leetcode-String to Integer(atoi) Python

本文介绍了一个Python程序,该程序能够从用户输入的字符串中解析出整数和浮点数,并进行基本的数值范围检查,确保数值在32位整数范围内。
import re
import math
String = str(input())
#删除开始和结尾的空格
String = String.strip(' ')
temp = String.split(' ')
for i in temp:
    #使用正则表达式匹配数字
    if((re.match('\d+[\D*\d*]*$',i)!=None )):
        end=len(i)
        #如果开始是以数字开头  但是又有字母存在,找到字母所在位置
        for j in range(len(i)):
            if(i[j].isdigit()==False):
                end = j
                break
        s = i[0:end]
        if(int(s)<(pow(2,31)-1)):
            print(int(s))
            break
        else:
            print(2147483647)
    elif((re.match('\d+\D*\d*\.\d+\D*\d*$',i)!=None)):
        end = len(i)
        # 如果开始是以数字开头  但是又有字母存在,找到字母所在位置
        for j in range(len(i)):
            if (i[j].isdigit() == False and i[j]!='.'):
                end = j
                break
        s = i[0:end]
        if(float(s)<(pow(2,31)-1)):
            print(int(math.floor(float(s))))
            break
        else:
            print(2147483647)
            break
    elif('-' in i):
        substring = i[1:len(i)]
        if(re.match('\d+[\D*\d*]*$',substring)!=None):  #匹配整数
            end = len(substring)
            # 如果开始是以数字开头  但是又有字母存在,找到字母所在位置
            for j in range(len(substring)):
                if (substring[j].isdigit() == False):
                    end = j
                    break
            s = substring[0:end]
            if(((-1)*int(s)>=(-1)*pow(2,31))):
                print((-1)*int(s))
                break
            else:
                print(-2147483648)
        elif((re.match('\d+\D*\d*\.\d+\D*\d*$',substring)!=None)):  #匹配小数
            end = len(substring)
            # 如果开始是以数字开头  但是又有字母存在,找到字母所在位置
            for j in range(len(substring)):
                if (substring[j].isdigit() == False and substring[j] != '.'):
                    end = j
                    break
            s = substring[0:end]
            if (((-1) * float(s) >= (-1) * pow(2, 31))):
                print((-1) * int(math.floor(float(s))))
                break
            else:
                print(-2147483648)
                break
        else:
            print(0)
            break
    elif('+' in i):
        substring = i[1:len(i)]
        if (re.match('\d+[\D*\d*]*$',substring)!=None):  #匹配整数
            end = len(substring)
            # 如果开始是以数字开头  但是又有字母存在,找到字母所在位置
            for j in range(len(substring)):
                if (substring[j].isdigit() == False):
                    end = j
                    break
            s = substring[0:end]
            if((int(s) <= pow(2, 31)-1)):
                print(int(s))
                break
            else:
                print(2147483647)
                break
        elif((re.match('\d+\D*\d*\.\d+\D*\d*$',substring)!=None)):   #匹配小数
            end = len(substring)
            # 如果开始是以数字开头  但是又有字母存在,找到字母所在位置
            for j in range(len(substring)):
                if (substring[j].isdigit() == False and substring[j]!='.'):
                    end = j
                    break
            s = substring[0:end]
            if ((float(s) <= pow(2, 31) - 1)):
                print(int(math.floor(float(s))))
                break
            else:
                print(2147483647)
                break
        else:
            print(0)
    else:
        print(0)
        break

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值