【作業題01】

rec=int(input()) if rec==0: print("Hello World") elif rec>0: print('He\nll\no \nWo\nrl\nd\n') elif rec<0: print('H\ne\nl\nl\no\n \nW\no\nr\nl\nd\n')
【作業題02】

寫這題的時候遇到很多問題。先介紹一下我自己原本的思路。
首先我想到的是要從輸入的字符串中分別識別出參與運算的數字和運算符。
因為參與運算的算式數字的個數和位置不確定,並且包含有數量和位置不確定的空格。
首先我想到的是,先去除輸入字符串中的空格。
采用【replace】函數:
replace函數是字符串類型擁有的方法(即它需要一個字符串對象進行調用)
該方法有兩個傳入參數string.replace("a","b")---->將string中的a字符用字符b替代。
此時字符串中只剩下參與運算的數字和運算符。所以我根據運算符類型將字符串分類(分支語句),並且根據運算符將字符串進行分隔。從而得到參與運算的兩個數以及運算類型。
需要用到關鍵字【in】以及函數【split】
if "+" in rec: li=rec.split('+',1) a=int(li[0])+int(li[1]) print("{:.2f}".format(a)) elif "-" in rec: li=rec.split('-',1) a=int(li[0])-int(li[1]) print("{:.2f}".format(a)) elif "*" in rec: li=rec.split('*',1) a=int(li[0])*int(li[1]) print("{:.2f}".format(a)) elif "/" in rec: li=rec.split('/',1) a=int(li[0])/int(li[1]) print("{:.2f}".format(a))
但是運行結果不盡人意主要是由於:當負數參與運算時,可能會被分類至減法運算中。此時,不光是運算類型錯誤,split函數也會錯誤地拆分原字符串(會在負號而非減號時就拆分字符串)
目前我不知道如何解決這個問題。(按照這一思路執行下去地話)
本題老師的參考答案為
s = input() print("{:.2f}".format(eval(s)))
只有兩行代碼!
用s接收傳入字符串,用eval函數去掉字符串最外層的引號,並且執行內部語句。
從這里學到幾點
- 語句中的空格並不影響語句的執行 10+11 與 10 + 11沒有區別(但是1 1+10就不行,每個int變量內部不能有空格)
- 我們不能夠掌握不知道的東西。好的工具可以提高效率。之前我不知道要用eval方法所以要解決更加復雜的問題。
- 要靈活運用知識。其實老師上課的時候有提到過【eval】函數,但是因為不熟悉,加上思維慣性上來就想到的是字符串的識別而不是執行運算語句。
【練習題03】

這題我的思路是識別字符串,根據每個字符的類型轉入不同的分支語句。再用一個【list】列表接收轉換后的數據。由於list在打印時會附帶[ ]及, ([1,2,3])
可以采用replace函數去除以上符號。也可以用一個空的字符串調用join函數,將空值插入列表的每個元素之間。
list01=[]
for a in rec :
if a=="0":
list01.append("零")
elif a=="1":
list01.append("一")
elif a=="2":
list01.append("二")
elif a=="3":
list01.append("三")
elif a=="4":
list01.append("四")
elif a=="5":
list01.append("五")
elif a=="6":
list01.append("六")
elif a=="7":
list01.append("七")
elif a=="8":
list01.append("八")
elif a=="9":
list01.append("九")
print("".join(list01))
但是因為寫練習的時候運行出了正確結果我就沒有查看老師的標准答案。其實這個題標准答案也是采用了eval函數。如果當時看了答案,作業題02應該會寫的。
template = "零一二三四五六七八九" s = input() for c in s: print(template[eval(c)], end="")
這里應使用了索引(真的很巧妙,可能很入門級,但是對於我而言真的覺得很巧妙)
我們將零一二三四五六七八九看作一個序列(字符串本身就可以由string[i]來指向字符串的每一個字符),然后輸入的阿拉伯數字剛好作為數組的序號i。
但是也有與我的代碼相同的部分,就是采用了【for】循環遍歷字符串。
這里的for循環和java里的好像不是很相似。(因為python的每個變量不用聲明,還是暫時有一些不習慣)
這里的意思是,遍歷字符串s,在每一次的循環中,用c指向正在遍歷到的單個字符(注意這里單個字符還是字符串類型,每個字符都有引號)
對該字符用eval函數去掉引號,作為template的序號。end=""表示每個輸出之間沒有間隔。
