題目:
你現在是棒球比賽記錄員。
給定一個字元串清單,每個字元串可以是以下四種類型之一:
1.
整數
(一輪的得分):直接表示您在本輪中獲得的積分數。
2.
(一輪的得分):表示本輪獲得的得分是前兩輪
"+"
有效
回合得分的總和。
3.
(一輪的得分):表示本輪獲得的得分是前一輪
"D"
有效
回合得分的兩倍。
4.
(一個操作,這不是一個回合的分數):表示您獲得的最後一個
"C"
有效
回合的分數是無效的,應該被移除。
每一輪的操作都是永久性的,可能會對前一輪和後一輪産生影響。
你需要傳回你在所有回合中得分的總和。
示例 1:
輸入: ["5","2","C","D","+"]
輸出: 30
解釋:
第1輪:你可以得到5分。總和是:5。
第2輪:你可以得到2分。總和是:7。
操作1:第2輪的資料無效。總和是:5。
第3輪:你可以得到10分(第2輪的資料已被删除)。總數是:15。
第4輪:你可以得到5 + 10 = 15分。總數是:30。
本題筆者思路:
1、先把C元素以及它的前一位元素删去;
2、更改其他元素的含義(包括轉為整型、更改為最本質的含義);
注:本題中,轉換數值字元串為數值型使用的方法是:int(a[i])。參考于:https://blog.csdn.net/jiedushi/article/details/7390292
def bangqiu(a):
######以下部分用于删除C元素以及C元素的前一個元素
b = []
for i in range(0,(len(a)-1)):
if a[i+1] != 'C' and a[i] != 'C': #隻保留本次位置以及下一次位置都不是C的元素
b.append(a[i])
if a[(len(a)-1)] != 'C':
b.append(a[(len(a)-1)]) #判斷原清單最後一個元素是不是C
######以下部分用于更改 D、+ 為它們的本質含義
d = b
for i in range(0,len(b)):
if b[i] == 'D':
d[i] = 2*int(d[i-1]) #把D修改為前一個元素的兩倍
continue
if b[i] == '+':
d[i] = int(d[i-1]) + int(d[i-2]) #把+修改為前兩個元素的求和
continue
d[i] = int(d[i])
######以下部分用于清單求和
s = 0
for i in range(0,len(d)):
s = s + d[i]
return(s)
運作結果:

注:本題目來源于:https://mp.weixin.qq.com/s/dwd85Q65P-Plvh2_7GOnyg
如有侵權,請聯系删除。
本題目結果為筆者自己思路并編寫代碼實作的,如有錯誤,歡迎指出,謝謝。