欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

记一次面试过程中的Python编程题

程序员文章站 2022-04-15 21:23:20
这几天面试过程中遇到一道Python编程题,题目如下: 面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字为负数,数字不能越界 1.使用循环,最笨的办法 # coding = 'utf-8' # @作者: ......

这几天面试过程中遇到一道python编程题,题目如下:

面试中遇到一个python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字为负数,数字不能越界

记一次面试过程中的Python编程题

1.使用循环,最笨的办法

# coding = 'utf-8'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

digit = '0123456789'
str0 = '-b-03dd2+349'
symbol = '+-'

def get_digit(string):
    num = ''
    syb = ''
    #获取数字
    for i in range(len(string)):
        if string[i] in digit:
            num += string[i]
    #获取正负号
    for j in range(len(string)):
        if string[j] in symbol and string[j+1] in digit:
            syb = string[j]
            break
    num = syb + num
    num = int(num)
    #判断是否越界
    if abs(num) > sys.maxsize:
        return ""
        print("整数越界")
    else:
        return int(num)

n = get_digit(str0)
print(n)

运行结果:

记一次面试过程中的Python编程题

2.使用filter函数

# coding = 'utf-8'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

#通过filter函数获取
num = filter(str.isdigit, str0)
num = ''.join(list(num))
print(num)
for j in range(len(str0)):
    if str0[j] in symbol and str0[j+1] in digit:
        sym = str0[j]
        break

num = sym + num
print(int(num))

运行结果:

记一次面试过程中的Python编程题

3.使用正则表达式获取

# coding = 'utf-8'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

num = re.findall(r'(-?\d+)', str0)
num = ''.join(num)
print(int(num))

运行结果:

记一次面试过程中的Python编程题

上面3种方法以第3种方法代码最少,效率最高。