2020年2月11日 星期二

輸入與輸出(Input & Print)


輸入與輸出

變數值的輸入與輸出可說編程之基本功。輸人與輸出的指令分別為input()與print()兩個函式,後者print()直接把括號內的變數或字串印出到終凱端機上,由監視器看出結果。輸入指令input()則必須在終端機上的輸入值放入一指定的變數,在電腦的記憶體或外掛的磁碟上檔貯存。括號內可以放入一個字串或合成字串,作為交換信息。輸入值則指向等號左邊的變數。其例如下:

# 將輸入值存入變數name
>>> name = input('請問芳名? ')
請問芳名?Martin  # Martin為輸入的字串
>>> name         # 將name變數之內容印出
'Martin'         # Martin 為一字串
>>> age = input('請問芳齡? ')
請問芳名?18     
>>> age          
'18'             # age 顯為一字串
# 因此要做四則運算時,必須用int()的函數將年齡轉換為整數
>>> birth_year=2020-int(age)
>>> birth_year   #   
2002             # 2002 現在的印出的 birth_year 已是整數。

印出指令print()則是將括號內的字串變數或字串直接印出。以birth_year之變數為例,要知道其內容,也可以用Print()這個函式印出:

>>> print(birth_year)   #  其結果與前面直接印出之數值與型式相同。
2002

為了配合印出效果,也可以在括號內加上字串,但必須與變數用分號分開:

>>> print('你的是',birth_year,'年出生的。')  
你的是 2002 年出生的。       #這樣的資訊更為口語化了!

顯然,使用print()函式時,其括號內可以混搭不同型態的變數或字串,但須記得用分號分開。

>>> print(1,2,3,'a','b','c')
1 2 3 a b c

印出結果可知,用分號分開的物件,印出其內容時,都會自動有一空格分開。
若分開的文字有異於空格,或者空格數要加寬時,則可在括號之最後面加入一項間隔參數 sep=' ',空格表示空一字距,兩個空白即空兩字距;亦可加入其他文字的分隔符號。如:*/%@等。舉例如下:

>>> print(1,2,3,'a','b','c',sep='*')
1*2*3*a*b*c

如果印出的文字須要空行列印時,則可在括號內另加入'\n',或'\n\n'。每加入一組印行時即可另空出一行或多行加再打印:

>>> print(1, 2, 3.5, 3*4, '\nMary', '3*4=' ,'\n\n')
1 2 3.5 12    #執行到印Mary前往下跳一行
Mary 3*4=     #執行到最後時再跳兩行



>>> 

其實在執行印出時,括號內的項目也可以為運算式。例如上式中有一項3*4的項目,在印出中先行運算,並將其結果置於相對位置。這種情況即使是字串,其中乘數的運算也可執行後將結果立即印出,以簡化程式的撰寫過程。

>>> print(1*2, 3*5/4, 'Mary! '*2,'我好愛妳喔')

2 3.75 Mary! Mary!  我好愛妳喔



#=============================================
#模擬Eliza機器人的講話

#機器人自我介紹
print()  #空一行
print('哈囉,自我介紹一下。我是BBM 66型,是新到的聊天機器人。')
print('你若想學會電腦語言,請先認識我。')
print('我會很多種語言,Python只是其中的一種。')
print('Python是簡單易學的直譯式語言。一道口令,一個動作。')

#請問芳齡 
print()
year=int(input('請問今年是民國幾年? '))
print('好的,想不到今年己經是西元',str(year+1911),'年啦!謝謝。')
ur_age=int(input('請問你今年多大年紀了?'))
print('你是西元'+str(1911+year-ur_age)+'生的。')
print('到西元2025年時,你將是',str(2025-year-1911+ur_age),'歲喔!')

#高興認識您
print()
print('\n讓我們談談您喜歡的動物,也喜歡聊聊吃的食物。')
name=input('請問你貴姓?')
print('您好,老'+name,'。很高興認識您。')

#食物話題
print()  #空一行
print('我喜歡吃巧克力,也喜歡嘗試各種種新食物。')
food=input('你呢?你最喜歡的食物是什麼呢?')
print('哈!我也喜歡'+food+'喔!')
howoften=input('請問你一天多久吃一次'+food+'呢?')
if int(howoften) > 2:
   print('真有趣,不知道這樣對健康好不好?'
else
   print('好極了!這會對您健康有益。')

#動物話題
print()  #空一行
animal=input('讓我們再談談寵物吧,我的龍物是機器貓,請問你呢?:')
if animal=='貓' or animal=='cat':
   print('我們似乎是同好囉。')
else:
   print(animal, '!?...這種動物我不太喜歡。')
   print('但我不知道'+animal,'是不是也喜歡吃'+food+'?')
print()

#加入心情對話
feeling=input('說真的, 我有點秀逗。你今天感覺如何?')
print('為什麼現在覺得'+ feeling+ '呢?')
reason=input('可以告訴我。好嗎? ')
print(reason, '...不管如何,謝謝您的與我分享。')

#道別
print('今天的事情有點多。')
print('我想你也累了。下次見吧!')
print('再見!老'+name,'。我們改天再聊。')

執行結果:

哈囉,自我介紹一下。我是BBM 66型,是新到的聊天機器人。 你若想學會電腦語言,請先認識我。 我會很多種語言,Python只是其中的一種。 Python是簡單易學的直譯式語言。一道口令,一個動作。 請問今年是民國幾年? 109 好的,想不到今年己經是西元 2020 年啦!謝謝。 請問你今年多大年紀了?76 你是西元1944生的。 到西元2025年時,你將是 81 歲喔! 讓我們談談您喜歡的動物,也喜歡聊聊吃的食物。 請問你貴姓?馮 您好,老馮 。很高興認識您。 我喜歡吃巧克力,也喜歡嘗試各種種新食物。 你呢?你最喜歡的食物是什麼呢?香蕉 哈!我也喜歡香蕉喔! 請問你一天多久吃一次香蕉呢?1 好極了!這會對您健康有益。 讓我們再談談寵物吧,我的龍物是機器貓,請問你呢?:狗 狗 !?...這種動物我不太喜歡。 但我不知道狗 是不是也喜歡吃香蕉? 說真的, 我有點秀逗。你今天感覺如何?非常好 為什麼現在覺得非常好呢? 可以告訴我。好嗎? 賺錢了 賺錢了 ...不管如何,謝謝您的與我分享。 今天的事情有點多。 我想你也累了。下次見吧! 再見!老馮 。我們改天再聊。

2020年1月31日 星期五

Say Python

年初忽然對編程語言感興趣。以前在學校使用培基、C、MATLAB等,興趣盎然;後者我還在部落格中專文介紹。現在時過境遷,這些都已荒廢良久。對正值腦力退化的退休人而言,似乎都已過去,思緒顯已不太靈光。不過,新動機是:我正值照顧兩位小孫子,他們現都在自學,必須找個好題材。閃過腦際的是:當今的學習趨勢下,編程已是幼子入世瓊林的第一課。若不早為之備,可能無法搭上新世代的數位列車,且未來的對話裡可能也會一問三不知。而且年歲雖高,總不能在小孩之前認老認輸,必須讓他們感到仍然有一個好的題材可供其成長,任其遨遊。  

於是,我放棄了春節美好的時光,坐在電腦前奮力不懈。專心瞭解當今的編程語言。我找了App Inventer、Scratch、Python等幾種。感覺上還是Python較有延展性,而且淺顯易學。這點在目前的網路上,倒是提供了許多方便學習的地方。  

Python語言很早就在谷歌的編程界推廣,最近逐漸變成首選,並且一度上了最佳排行榜。由於它以模塊方式組成,可覆蓋的領域寬廣。目前谷歌、臉書、推特及股票分析程式等都能見其應用。其較大的缺點是採用直譯式,與MATLAB相同,故運轉速度較慢。但由於編寫淺顯容易,其直譯的功能反而在編程寫作上有立即的優勢。 

據觀察家研判,Python一直能名列前茅,主要是因為容易學習,其語法像英語,容易理解。目前程式語言已經完全免費開源,可以任人取用,因而更增加其接受度。正在考慮學習編碼語言的人,不妨考慮使用Python作為學習編程的工具。  

Python是1989年由荷裔范·羅瑟姆(Van Rossum)開發。他以一個他喜愛的飛天馬戯團--蒙蒂派森(Monty Python)的名稱,命其程式為Python。從此與蛇搭上關係,成為纏繞在一起的Python(爬蟲)。由下圖可以看出當今各種程編程語言的發展趨勢,而爬蟲(紅色線)己經竄升到並駕齊驅的水準。  

Python的簡單運算式,其形式很容易理解。基本上,與一般的運算式大體相同,變數的使用也沒有太嚴格的規定。同一個變數可以指定為整數,也可以在運算過程中,改變為字串或其他形式的數值。舉例如下:







#====================================================
# 以井字號為開頭的敍述,在Python中,都認為註解。其後的文字對程式不產生作用:
>>> s = 20       #將變數 s 設值為20
>>> s            #顯示s的結果
20                 #結果為20
>>> s = "Hello"  #同樣的s變數改設為字串"Hello"
>>> s            #顯示s內容為字串無誤
'Hello'
>>> s = 20   #變數s又重設為整數20 (註:原先的字串"Hello"不見了!)
>>> s 
20               #s的值變為20了!
>>> s / 3        #變數s值除以3
6.666666666666667   #結果是無窮數
>>> s // 3       #整數除法
6                #得整數6
>>> s ** 2       #20的二次方
400              #結果正確!
>>> s = "I'm Ruby"   #把變數改為字串 "I'm Ruby"
>>> s * 3        #字串可以乘以3!等於疊加三次,哈!
"I'm RubyI'm RubyI'm Ruby"   #真的變為三倍的字串
>>> print(s)     #不過變數s的字串內容沒變。
I'm Ruby

>>>