参加了华为的实习生面试,在上机考试这一关,本着事先准备的原则,在网上找了一些往年的华为题来练练手,以下是我自己对题目的见解及解决方式,若那里有不对的或者更好的解决方式,请务必教教我这个菜鸡!!!
题目如下(图片获取自https://blog.csdn.net/lyxleft/article/details/88698136?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task):
解题思路:
代码如下:
import os
# 首先输入一个字符串表示输入
the_input_str = input()
# 判断字符串首尾是否是非法字符
if the_input_str == '' or the_input_str[0] in '+-' or the_input_str[-1] in '+-':
os._exit(0)
# 定义几个中间变量
the_temp_digit = '' # 存储连续的数字字符
# 定义两个list存放数字和符号
the_list_digit = []
the_list_sign = []
# 开始一次判断每个字符
for char in the_input_str+'=':
# 判断字符是否是规定的字符
if char not in '1234567890+-=':
os._exit(0)
# 如果是符号就加入list中
if not char.isdigit():
the_list_sign.append(char)
# 判断中间字符串是否为空,即表示是否有一个连续的数字字符
if not the_temp_digit == '':
the_list_digit.append(int(the_temp_digit))
the_temp_digit = ''
if char == '=':
break
continue
# 如果是数字字符的话,首先要判断是否是十位数的
if char.isdigit():
the_temp_digit = the_temp_digit + char
continue
# 接下来开始进行计算
the_temp_sum = 0 # 用来保存中间值
the_place_list = 1 # 表示字符串的位置
for sign in the_list_sign:
if sign == '+':
the_temp_sum = the_temp_sum + the_list_digit[the_place_list]
the_place_list += 1
continue
if sign == '-':
the_temp_sum = the_temp_sum - the_list_digit[the_place_list]
the_place_list += 1
continue
# 因为上面的没有算第一个数字所以这个时候操作上
if the_list_sign[0] == '+':
the_temp_sum = the_temp_sum + the_list_digit[0]
if the_list_sign[0] == '-':
the_temp_sum = the_temp_sum - the_list_digit[0]
print(the_temp_sum)
期间遇到的问题:
解决方案: