华为20届面试软件题第一题 利用python

引言:

参加了华为的实习生面试,在上机考试这一关,本着事先准备的原则,在网上找了一些往年的华为题来练练手,以下是我自己对题目的见解及解决方式,若那里有不对的或者更好的解决方式,请务必教教我这个菜鸡!!!

主体

题目如下(图片获取自https://blog.csdn.net/lyxleft/article/details/88698136?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task):

解题思路:

  1. 首先就利用input直接输入一个字符串
  2. 然后迭代,一次判断一个字符
  3. 然后再次迭代,利用两个lsit来遍历

代码如下:

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)

期间遇到的问题:

  1. python怎么直接退出程序?
  2. 如果用上述代码直接遍历的话那么最后一个整数怎么操作?
  3. 怎么判断每个字符是否合法?

解决方案:

  1. 在网上找到个好像看起来很靠谱的样子的方法:os._exit(0)
  2. 在输入的字符串后面手动加一个‘=’符号,因为按照题目要求是不能加‘=’的
  3. 利用 in 这个保留字来判断

你可能感兴趣的:(python)