题目在这:https://leetcode-cn.com/problems/string-to-integer-atoi/
思路分析:
str类型变int类型问题。
这一题题目看上去挺多,不过就那么几个要求。
1.字符串前面空格不要
2.只要开头的连续数字(不算正负号)
3.范围在[-231, 231 - 1]之间
4.没有读入数字则为0
按照上面的步骤来写就很容易了。
法一:
= ''
s = s.strip() # 去掉前后的空格,准确的可以写lstrip
if len(s) == 0: # 字符串内没有字符时,返回0
return 0
if not s[0].isnumeric() and s[0] != '+' and s[0] != '-': # 第一位非数字 和加减号
return 0
if s[0] == '+' or s[0] == '-': # 第一位带符号
temp = s[0] # 吧符号存到temp里
s = s[1:] # 去掉符号
for i in range(0,len(s)):
if not s[i].isnumeric(): # 非数字
s = s[:i] # 只要带数字的部分
break
if s == '': # 若 切割后为空
return 0
s = temp + s # 带上正负号 判断范围
if int(s) <= -2 ** 31:
return -2 ** 31
elif int(s) >= 2 ** 31 -1:
return 2 ** 31 -1
else:
return int(s)
return int(s)
法二
使用正则表达式解决问题,压缩到只需要一行代码。
s = max(min(int(*re.findall('^[+|-]?\d+',s.strip())),2 ** 31 -1),-2 ** 31)
正则表达式 :
^[+|-]?\d+
- .
^ 表示从头开始匹配
- .
[+|-]
表示可以是加号或者减号
- .
? 表示可以为0个或者1个
-
\d 表示为数字
- .
+表示可以有一个或者多个
re前面的星号,就是把正则返回来的列表 拆包变成int。
例如:
s=['422']
print(*s) 输出422
= ['a','b','c']
B = [1,2,3,4,5]
for i in zip(A,B):
print(i)
输出
('a', 1)
('b', 2)
('c', 3)