文字列は、文字列5.8の整数であるかどうかを判断する方法第5章:Pythonプログラマは、ブック---問題解決のアルゴリズムの概要をインタビュー

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.8 如何判断字符串是否为整数

题目:
写一个方法,检查字符串是否是整数,如果是整数,那么返回其整数值。

分析:
最关键的地方是:
1) 负数可以有负号,且必须位于第一个;正数可以有正号,也可以没有,如果有
必须是位于第一个
2) 对负号判定完之后,后面只能是数字,且不能出现除了数字外的任何符号,
例如小数点
3) 计算值
假设当前位为num,之前的计算结果为result
result = result * 10 + num

+123
-123
123
都是符合要求的

关键:

参考:
Python程序员面试算法宝典
'''

def toInt(string):
    if not string:
        return False, None
    size = len(string)
    multiply = 1
    haveSymbol = False
    if '-' == string[0]:
        multiply = -1
        haveSymbol = True
    elif '+' == string[0]:
        haveSymbol = True
    if haveSymbol:
        begin = 1
    else:
        begin = 0
    numSet = set([str(i) for i in range(0, 10)])
    result = 0
    for i in range(begin, size):
        if string[i] not in numSet:
            return False, None
        num = ord(string[i]) - ord('0')
        result = result * 10 + num
    result *= multiply
    return True, result


def process():
    string = '123'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"
    string = '+123'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"
    string = '-123'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"
    string = '12+3'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"
    string = '+1.23'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"
    string = '++123'
    flag, result = toInt(string)
    if flag:
        print result
    else:
        print "invalid string"


if __name__ == "__main__":
    process()

 

おすすめ

転載: blog.csdn.net/qingyuanluofeng/article/details/94331216