999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

解決溫標轉換問題的深度探究

2022-05-13 12:12:42
牡丹江教育學院學報 2022年1期
關鍵詞:程序教材探究

肖 靖 孫 軍

(牡丹江市教育教學研究院, 黑龍江 牡丹江 157000)

編程是高中階段信息技術學科重要的知識與能力,是所有高中生的必修課程,其主要研究對象是算法和程序設計。我們都知道程序設計的一般過程可分為四步。首先,分析問題,在分析問題的過程中我們要確定解決問題的方法和對所涉及到的數據進行描述;其次,設計算法,在設計算法的過程中我們要選擇描述算法的方法和對算法進行設計;再次,編寫程序,在編寫程序的過程中我們要選擇程序設計的語言并編寫程序,本文沿用教材上使用的Python語言對溫標轉換問題進行深度的探究;最后,運行調試,在運行調試過程中我們要運行編寫好的程序,如程序不能按照我們預想的方式運行,要修改編程過程中產生的錯誤,然后再運行、再調試,直到程序的運行結果符合我們的既定預期為止。本文主要從溫標轉換程序的功能性和健壯性等方面對教材中原有的程序進行深度探究。

一、程序運行環境

本文所涉及到的編程為與普通高中信息技術教材保持一致和考慮到使用習慣以及程序運行的普遍性和通用性等因素,確定了如下的操作系統、編程語言和集成開發環境:

操作系統及版本Windows11中文版21H2編程語言及版本Python3.8.6集成開發環境及版本Pycharm 2021.3 (Professional Edition)

二、原有程序分析

(一)問題分析及探究

教材中給出的問題是如何將給到的華氏溫度轉換為攝氏溫度?教材中給出解決這個問題的過程是在程序中接收用戶輸入的華氏溫度值,再運用給定的公式計算出該華氏溫度對應的攝氏溫度,最后再輸出攝氏溫度的值。

如果對教材中給出的問題進一步深度探究,我們可以將問題變成如何將給到的華氏溫度和攝氏溫度進行互轉,也就是說,假設我們現在給程序輸入一個華氏溫度的值,程序可以將其對應的攝氏溫度的值進行輸出;同樣我們現在給程序一個攝氏溫度的值,程序也可以將其對應的華氏溫度的值進行輸出。而在給定程序值的時候我們需要指明這是一個攝氏溫度還是一個華氏溫度以方便程序對其進行相應的轉換。

另外,在教材中只是提到了接收用戶輸入的華氏溫度的值,而并沒有對華氏溫度值的有效性進行驗證。我們都知道,如果在一個程序當中開放對用戶的輸入也就是說程序可以接收用戶輸入內容的時候,為了保證程序的健壯性,程序自身必須能夠對其接收的值進行有效性驗證。如果程序缺少有效性驗證,則極易引發非預期數據的輸入,進而導致程序崩潰無法繼續運行。舉個例子:教材中的當前程序需要的是一個華氏溫度,如果我們輸入了諸如“abc”之類的字符串,那么程序就會報出“ValueError: could not convert string to float: 'abc'”這樣的錯誤,為了避免這樣的錯誤發生,程序中就需要補充相關的數據驗證功能。即當用戶輸入的數據不符合程序要求的類型時,程序不會向下繼續執行,而會要求用戶重新進行輸入,直到用戶輸入的數據符合程序的要求再繼續向下執行。

當我們延申了教材原有的問題后就需要對解決這個問題的過程進行繼續探究。教材原有的解決過程是在程序中接收用戶輸入的華氏溫度值,再運用給定的公式計算出該華氏溫度對應的攝氏溫度,最后再輸出攝氏溫度的值。對原有解決過程的繼續探究如下:首先,我們需要將程序接收的參數由一個變為兩個,除了需要接收溫度的數值外還需要接收溫度的類型,也就是說這個溫度是華氏溫度還是攝氏溫度;其次,我們通過程序的循環結構驗證用戶輸入的數據是否符合規范,如果不符合規范則提示用戶重新輸入符合規范的值再驗證,直到用戶輸入的數據符合程序的要求為止;再次,當用戶輸入的數據符合規范后,我們通過程序的選擇結構要進行如下判斷——如果輸入的是一個攝氏溫度,那么就需要執行攝氏溫度轉華氏溫度的公式,如果輸入的是華氏溫度,那么就需要執行華氏溫度轉攝氏溫度的公式;最后,將轉換后的結果進行輸出,展示給用戶。

(二)算法分析及探究

通過對以上算法流程圖的分析及探究,我們可以清晰地看到原算法流程圖為理想狀態下采用自上而下執行的順序結構編程。該程序隱含假設了用戶輸入的溫度值為符合程序計算規范的數字,而且從該算法流程圖中可以看出原程序功能單一,即程序只能從華氏溫度轉為攝氏溫度。我們從經過深入探究后的現算法流程圖中可以明確地看到如下內容。首先,用戶輸入的參數比原算法流程圖多了一個,給了用戶更多的輸入選擇,即可以輸入代表攝氏溫度的溫度值也可以輸入代表華氏溫度的溫度值;其次,在現算法流程圖中也明確體現出對輸入參數的數據有效性校驗,即如果輸入的數據不符合規范則程序會一直要求用戶輸入,直到符合規范為止;最后,在現算法流程圖中對輸入符合規范的溫度類型進行判斷,根據判斷的結果執行相應的計算邏輯并輸出。

三、新增程序功能并完善數據驗證

經過上述的分析問題和設計算法,我們現在就可以根據設計好的算法開始編寫程序。在給出我們對解決溫標轉換問題深度探究后的程序前,我們先回顧一下教材中原有的程序。

(一)原有程序及探究

f = float(input("請輸入一個華氏溫度:"))c = 5 ? (f - 32) / 9print("攝氏溫度:", c)

以上即是教材中提供的三行程序代碼,現對其進行探究如下。第一行代碼定義了一個變量f用于接收用戶輸入的華氏溫度并浮點轉換后的值,在該行代碼中首先使用了一個Python的內置函數input()讓程序暫停等待用戶輸入內容,為了讓用戶更明確知道自己要輸入的是什么內容,程序的編寫者在input()函數中提供了一個字符串——” 請輸入一個華氏溫度:”來進行說明。如果程序開始運行后,此時會先暫停并在屏幕上顯示以上提示內容并等待用戶輸入一個具體的華氏溫度值,當用戶輸入完畢后input()函數會將用戶輸入的結果以字符串的形式返回。因字符串類型的值無法正常參與數學運算,所以需要在input()函數外包裹了一個Python內置函數float(),目的是將input()函數返回的字符串轉換成浮點類型的數,在float()函數轉換的過程中,理想狀態下是用戶輸入了一個數字而非一個字符串。最后將用戶輸入的華氏溫度經轉換后的浮點型數值賦值給變量f用于后續的運算。第二行代碼定義了一個變量c用于接收華氏溫度經公式轉換后得到的攝氏溫度的值。轉換公式是將第一步聲明并賦值華氏溫度值的變量f減去數值32,得到的差再與數字5相乘最后與數字9相除。最終得到的結果就是華氏溫度值經過計算轉換為攝氏溫度值并賦予變量c。第三行代碼直接調用了Python的內置函數print()將第二行聲明并賦值轉換后攝氏溫度的變量c進行打印輸出在操作系統終端展示給用戶。

以上即是對教材中溫標轉換問題原程序的探究,可以看出這三行代碼中并沒有包括對輸入數據的驗證和華氏溫度與攝氏溫度互轉功能。下面我們繼續看現有程序是如何更進一步解決剛才所提到的問題。

(二)現有程序及探究

文件名:temperature_converter.pydef check_type_and_value(param_type, param_value): try: float(param_value) except ValueError: return False else: return param_type == "F" or param_type == "C"if __name__ == "__main__": fc_type = input("請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):").upper() fc_value = input("請輸入一個溫度數值:") while not check_type_and_value(fc_type, fc_value): print("??提示??: 請輸入正確的溫度類型和溫度數值!") fc_type = input("請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):").upper() fc_value = input("請輸入一個溫度數值:") fc_value = float(fc_value) if fc_type == "F": c_value = 5 ? (fc_value - 32) / 9 print(f"華氏溫度 {fc_value}℉ 轉換成對應的攝氏溫度為 {c_value}℃")else: f_value = fc_value ? 9 / 5 + 32 print(f"攝氏溫度 {fc_value}℃ 轉換成對應的華氏溫度為 {f_value}℉")

以上即是對教材中提供的程序深入探究并豐富功能后的現有程序。現對其說明如下。該程序從結構上看分為兩部分:上半部分為驗證數據的check_type_and_value(param_type, param_value)函數;下半部分為以if __name__ == "__main__":開頭的程序執行入口。我們先從下半部分的程序執行入口開始闡述。對于Python語言來說"__main__"是頂層代碼執行時候的作用域名,而每個Python源文件都有一個__name__屬性,我們通過操作系統的終端直接運行某個Python源文件的時候,其__name__屬性的值就會等于"__main__"。因此,我們可以通過此特性來判斷其所在的Python源文件是在操作系統終端直接運行還是作為其它程序的第三方模塊被導入使用。如果該行代碼的運行結果為True,則意味著其所在的文件是在操作系統終端直接運行,那么就會繼續運行其if選擇結構內的代碼;如果該行代碼的運行結果為False,則意味著其所在的文件是被其它程序以第三方模塊的形式導入使用,那么就不會運行其if選擇結構內的代碼,而會跳過if選擇結構運行其后的代碼,若if選擇結構后無代碼則該Python源文件作為導入內容結束運行。

因為我們是從操作系統終端直接運行該Python源文件,所以在程序入口處if __name__ == "__main__":的執行結果為True,進入if選擇結構內繼續運行。在其中我們首先定義了兩個變量——fc_type和fc_value,分別用來接收溫度類型和溫度數值,此處接收到的兩個變量值都是字符串類型,所使用的input()內置函數在上文已經介紹過,此處不再贅述。值得注意的是對于fc_type變量來說,為了與之后要說明的驗證函數check_type_and_value(param_type, param_value)中的邏輯判斷標準相符,我們在其后的input()內置函數后又調用了upper()內置函數,該內置函數的作用是返回調用該字符串的副本并將其中的英文字母都轉換為大寫。

兩個變量fc_type和fc_value接收到用戶輸入想要轉換的溫度類型和溫度值后,我們使用了一個while循環結構配合check_type_and_value(param_type, param_value)函數來對接收到的這兩個變量進行驗證。如果對兩個變量的驗證結果符合程序要求的數據格式,那么程序繼續往下運行;反之,則重復讓用戶輸入溫度類型和溫度值的步驟再進行驗證,直到用戶輸入的變量值和變量類型符合程序要求的數據格式為止。下面來看一下我們自定義的check_type_and_value(param_type, param_value)函數,該函數的簽名處有兩個形參分別為param_type和param_value,目的是用來接收fc_type和fc_value這兩個實參的賦值。在函數內部,我們首先通過使用Python的異常處理結構對溫度數值進行驗證,因為我們接收到的值格式是字符串類型,而我們需要的值格式是浮點型,所以我們使用float()內置函數來將接收到的字符串類型值轉換為浮點類型值。而在轉換的過程中有可能會出現ValueError類型的異常,故我們需要將轉換過程float(param_value)置于try語句的監視下。如果轉換不成功則會拋出ValueError類型的異常,被except語句捕獲,代表用戶輸入的溫度數值不符合規范返回False讓用戶重新輸入;如果轉換成功則會跳過except語句進入到else語句中對param_type參數進行驗證。此處,我們對param_type的驗證邏輯是該變量的值必需為"F"或"C"其中之一,如果不是"F"或"C"其中之一則通過邏輯運算or的運算結果返回False讓用戶重新輸入,直到用戶輸入的溫度類型和溫度數值符合規范為止。

當用戶輸入的溫度類型和溫度數值符合規范后,程序繼續向下執行對溫度數值進行浮點型轉換,轉換后的溫度數值用于之后的運算。溫度數值轉換完畢后,執行選擇結構對溫度類型進行判斷,如果變量fc_type表示的溫度類型值為字符串"F",則代表要轉換的溫度是華氏溫度,就需要執行if分支后的語句;否則的話就表示溫度類型為字符串"C",則代表要轉換的溫度是攝氏溫度,就需要執行else分支后的語句。在華氏溫度轉攝氏溫度的計算過程中,我們使用了教材中提供的公式——攝氏溫度值 = 5 *(華氏溫度值-32)/9;在攝氏溫度轉華氏溫度的計算過程中,我們倒推了教材中提供的公式——華氏溫度值 = 攝氏溫度值 * 9/5 + 32。得到轉換后的溫度數值后,我們調用print()內置函數通過格式化字符串常量的方式將結果進行輸出顯示。

四、運行調試

以上運行過程中加粗文字為我們在程序執行過程中輸入的內容。通過上述兩次的運行結果我們可以看出,第一次運行華氏溫度可以正常轉換為攝氏溫度;第二次運行我們先故意輸入了一個錯誤的溫度類型W,結果程序給予了我們提示,讓我們重新輸入,然后我們又故意輸入了一個錯誤的溫度值36.5abc,同樣程序給予了我們提示,讓我們重新輸入,最后我們輸入了符合規范的溫度類型C和溫度數值36.5,得到了正確的攝氏溫度對華氏溫度的轉換結果輸出。

python temperature_converter.py請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):F請輸入一個溫度數值:97.7華氏溫度 97.7℉ 轉換成對應的攝氏溫度為 36.5℃請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):W請輸入一個溫度數值:36.5??提示??: 請輸入正確的溫度類型和溫度數值!請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):C請輸入一個溫度數值:36.5abc??提示??: 請輸入正確的溫度類型和溫度數值!請選擇要輸入的溫度類型(華氏溫度請輸入F 攝氏溫度請輸入C):C請輸入一個溫度數值:36.5攝氏溫度 36.5℃ 轉換成對應的華氏溫度為 97.7℉

五、總結

我們經過對上海科技教育出版社出版的普通高中教科書《信息技術教材(必修1)數據與計算〈第三單元 算法和程序設計——項目六 解決溫標轉換問題〉》進行了深度探究,在教材原有案例的基礎上進行了拓展,對溫標轉換功能進行了升級,使其可以實現華氏溫度和攝氏溫度的相互轉換。拓展后的源程序還實現了對用戶輸入數據的校驗,使程序的健壯性得到了進一步的提升,達成了教材拋磚引玉的目的。對教材原有案例的深度探究精神更有助于學生編程能力的提高和編程思維的擴展!

猜你喜歡
程序教材探究
一道探究題的解法及應用
教材精讀
教材精讀
教材精讀
一道IMO預選題的探究
中等數學(2021年11期)2021-02-12 05:11:46
教材精讀
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
探究式學習在國外
快樂語文(2018年13期)2018-06-11 01:18:16
一道IMO預選題的探究及思考
中等數學(2018年11期)2018-02-16 07:47:42
“程序猿”的生活什么樣
主站蜘蛛池模板: 国产亚洲精品自在久久不卡| 男女精品视频| 99视频在线免费| 亚洲区一区| 国产久操视频| 国产99视频在线| 久久久久亚洲AV成人网站软件| 福利国产在线| 日本黄色a视频| 亚洲欧美在线精品一区二区| 久久青草精品一区二区三区 | 国产九九精品视频| 91视频精品| 亚洲va欧美va国产综合下载| 久久精品国产91久久综合麻豆自制| 国产精品99久久久| 亚洲无码高清一区二区| 18禁不卡免费网站| 国产人成在线视频| 美女裸体18禁网站| julia中文字幕久久亚洲| 欧美在线精品怡红院| 国产欧美在线观看一区| 日韩精品高清自在线| 日本a∨在线观看| 国产精品免费福利久久播放| 国产香蕉国产精品偷在线观看| 亚洲第一黄色网址| 99热这里只有精品免费| 亚瑟天堂久久一区二区影院| …亚洲 欧洲 另类 春色| 91最新精品视频发布页| 四虎国产永久在线观看| 国产欧美日韩综合在线第一| 精品无码国产自产野外拍在线| 亚洲精品卡2卡3卡4卡5卡区| 亚洲天堂久久| 亚洲国产AV无码综合原创| 国产91精品久久| 五月天综合网亚洲综合天堂网| 青青草91视频| 久久成人18免费| 亚洲欧洲天堂色AV| 激情综合婷婷丁香五月尤物| 亚洲—日韩aV在线| 午夜丁香婷婷| 国产微拍一区二区三区四区| 亚洲黄色网站视频| 免费福利视频网站| 欧美色视频网站| 无码一区二区三区视频在线播放| 国产精品成| 丰满人妻久久中文字幕| 国产福利免费视频| 中文字幕欧美日韩高清| 免费一级成人毛片| 成人在线不卡视频| 精品一区二区三区水蜜桃| 色综合中文字幕| 操国产美女| 国产在线观看成人91| 久久久久无码国产精品不卡| 国产黑人在线| 欧美α片免费观看| 日本a级免费| 国产成人综合网| 特级做a爰片毛片免费69| 国产欧美日本在线观看| 爽爽影院十八禁在线观看| 日韩欧美中文字幕一本| 免费观看三级毛片| 97在线国产视频| 亚洲视频欧美不卡| 中文字幕在线观看日本| 久久人妻xunleige无码| 婷婷六月天激情| 免费在线成人网| 在线永久免费观看的毛片| 国产色爱av资源综合区| 国产一区二区三区日韩精品| 国产小视频免费观看| 久久国产毛片|