引言:
參加了華爲的實習生面試,在上機考試這一關,本着事先準備的原則,在網上找了一些往年的華爲題來練練手,以下是我自己對題目的見解及解決方式,若那裏有不對的或者更好的解決方式,請務必教教我這個菜雞!!!
主體
題目如下(圖片獲取自https://blog.csdn.net/lyxleft/article/details/88698136?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task):
解題思路:
- 首先就利用input直接輸入一個字符串
- 然後迭代,一次判斷一個字符
- 然後再次迭代,利用兩個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)
期間遇到的問題:
- python怎麼直接退出程序?
- 如果用上述代碼直接遍歷的話那麼最後一個整數怎麼操作?
- 怎麼判斷每個字符是否合法?
解決方案:
- 在網上找到個好像看起來很靠譜的樣子的方法:os._exit(0)
- 在輸入的字符串後面手動加一個‘=’符號,因爲按照題目要求是不能加‘=’的
- 利用 in 這個保留字來判斷