」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 我可以開車嗎?編寫酒精測試儀的程式碼

我可以開車嗎?編寫酒精測試儀的程式碼

發佈於2024-11-18
瀏覽:819

在我居住的丹麥,不幸的是,我們在歐洲保持著一項記錄:我們的孩子是歐洲大陸飲酒最多的人。正因為如此,人們非常關注減少青少年飲酒並教育孩子們了解酒精的影響。

我為當地學校編寫了一個 HTML 和 JavaScript 酒精計算器,向學生展示酒精如何影響身體以及如何計算血液酒精含量 (BAC)。

BAC是如何計算的?

要估計 BAC 或“promille”,您需要一些關鍵資訊:

  • 您的體重 – 因為較大的身體比較小的身體更能稀釋酒精。
  • 生物性別 – 由於體內水分含量不同,進而影響酒精在體內的分佈。
  • 消耗的酒精單位數 – 因為每種飲料都有不同的酒精濃度。

計算酒精單位

不同的飲料為您的血液貢獻不同量的酒精,取決於其體積和酒精濃度。為了標準化,酒精計算單位通常如下所示:

volume (cl) * alcohol percentage * 0.8 / 120

結構

整個「應用程式」的結構為

,具有組織好的字段集和命名控件,可以輕鬆地使用以下方式提取必要的元素:
const { add, addbeverage, etc. } = app.elements;

由於BAC限制因地區而異,我們需要先選擇地區,調整體重滑塊,然後選擇生物性別:

Can I Drive? Coding an Alcohol Tester


接下來我們可以開始加入飲料了:

Can I Drive? Coding an Alcohol Tester

這是一個簡單的

,其中單位、體積和酒精百分比的各個字段被禁用(並通過 CSS 隱藏),直到您從飲料選擇器中進行選擇:

Can I Drive? Coding an Alcohol Tester

這些欄位的可見性由enableElements函數控制:

[percentage, units, volume].forEach(el => el.disabled = !bool);

當我們添加飲料時,會建立一份消耗飲料列表,併計算 BAC、預計醒酒時間等:

Can I Drive? Coding an Alcohol Tester

然後您可以繼續添加更多飲料,BAC也會相應更新:

Can I Drive? Coding an Alcohol Tester

令我感到非常驚訝的是,美國的合法 BAC 比瑞典或挪威的大 4 倍!

換句話說,在瑞典,您可能會失去您的執照,因為飲酒量達到了美國法律允許的數量


分解 BAC 計算

BAC的核心計算在calculateAnswer函數中處理:

function calculateAnswer() {
  const alcoholMetabolismRate = 0.015;
  const currentBAC =
    ((total * 10) /
      (weight.valueAsNumber *
        1000 *
        parseFloat(bodywater.value))) *
    100;
  const hoursToSober = (
    currentBAC / alcoholMetabolismRate
  ).toFixed(1);
  const canDrive =
    currentBAC 



讓我們分解一下:

  1. 酒精代謝率:alcoholMetabolismRate = 0.015

    • 此數值代表身體每小時減少 BAC 的平均速率(約 0.015%)。
  2. 計算目前BAC:currentBAC = ((total * 10) / ((weight.valueAsNumber * 1000) * parseFloat(bodywater.value))) * 100

    • 總計 * 10:這會將消耗的總酒精單位轉換為克(因為 1 個單位約等於 10 克純酒精)。
    • weight.valueAsNumber * 1000:將體重從公斤轉換為克以供計算。
    • bodywater.value:基於生物性別的小數因子,影響酒精在體內的分佈(例如,男性為 0.58,女性為 0.49)。
    • 然後將結果乘以 100,將 BAC 轉換為百分比。
  3. 估計清醒時間:hoursToSober = (currentBAC / alcoholMetabolismRate).toFixed(1);

    • 將目前 BAC 除以代謝率,以估算 BAC 達到零所需的時間。
  4. 判斷合法駕駛狀態: canDrive = currentBAC

    • 將目前 BAC 與選定的合法 BAC 限值進行比較。如果目前 BAC 在限制範圍內,則認為使用者「適合駕駛」;否則,他們就不是。

calculateAnswer 函數然後將這些值組合成一條訊息,顯示當前的 BAC、清醒前的小時數以及使用者是否適合開車。


...本教學就到此結束。如果您願意,可以隨意嘗試 CodePen——也許可以創建一個對兒童更友善的用戶體驗。請記住,該工具提供了估計值,但沒有考慮您飲用每種飲料的時間等因素。請記住,它很可能會被清醒的人使用!


示範


封面由 DALL·E 提供,提示:以類似於早期迪士尼和茶杯頭的卡通風格生成一輛醉車,作為圖像我可以裁剪到 1000x420 像素。

版本聲明 本文轉載於:https://dev.to/madsstoumann/can-i-drive-coding-an-alcohol-tester-163g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-19
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-19
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-19
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-19
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-19
  • 我可以開車嗎?編寫酒精測試儀的程式碼
    我可以開車嗎?編寫酒精測試儀的程式碼
    在我居住的丹麥,不幸的是,我們在歐洲保持著一項記錄:我們的孩子是歐洲大陸飲酒最多的人。正因為如此,人們非常關注減少青少年飲酒並教育孩子們了解酒精的影響。 我為當地學校編寫了一個 HTML 和 JavaScript 酒精計算器,向學生展示酒精如何影響身體以及如何計算血液酒精含量 (BAC)。 ...
    程式設計 發佈於2024-11-18
  • 為什麼我的 Python MySQL 插入功能不起作用?
    為什麼我的 Python MySQL 插入功能不起作用?
    Python MySQL 插入不起作用在 Python 中,利用 MySQL API 連接到 MySQL 資料庫是一種流行的方法。但是,嘗試將記錄插入資料庫時可能會出現困難。 遇到的一個此類問題是無法插入記錄。經檢查,插入操作涉及的程式碼如下:db = MySQLdb.connect("l...
    程式設計 發佈於2024-11-18
  • 修正「無法在模組外部使用導入語句」錯誤
    修正「無法在模組外部使用導入語句」錯誤
    作为 JavaScript 和 TypeScript 开发人员,我们在使用不同的模块系统时经常会遇到意外的错误。一个常见问题是“无法在模块外部使用 import 语句”错误。它通常在使用现代 ES 模块 (ESM) 或处理涉及 Webpack、Babel 或 Node.js 环境等捆绑程序的设置时出...
    程式設計 發佈於2024-11-18
  • 如何從本機主機連線到 Docker MySQL 容器?
    如何從本機主機連線到 Docker MySQL 容器?
    從本地主機連接到Docker MySQL 容器要直接從主機與Docker 容器中運行的MySQL 實例進行交互,請按照以下步驟操作步驟:使用docker-compose up由於您已經在Docker 主機上發布了連接埠3306,因此您可以從主機本身連接到它:$> mysql -h 127.0....
    程式設計 發佈於2024-11-18
  • 如何在具有不同範本參數的範本類別中定義好友關係?
    如何在具有不同範本參數的範本類別中定義好友關係?
    深入研究類別範本與Template Class Friends 深入研究類別範本與Template Class Friends定義二元樹類別(BT)及其元素類別(BE)時,BT 存取BE私人會員需要建立好友關係。然而,理解正確定義關係的底層機制至關重要。 最初,您嘗試將好友關係宣告為 templat...
    程式設計 發佈於2024-11-18
  • ## 建立強大的 CMS 後端:OOP 和 MVC 結構如何增強專案管理?
    ## 建立強大的 CMS 後端:OOP 和 MVC 結構如何增強專案管理?
    PHP OOP 核心架構:為CMS 後端實現堅實的基礎了解物件導向程式設計(OOP) 在開發時至關重要可靠的CMS 後端框架。結構良好的框架應遵循 OOP 原則並採用 MVC 設計來提高效率。 管理單一專案頁面上的多個部分處理一個專案上的多個部分時專案頁面,考慮使用不同的方法來管理每個部分。例如,索...
    程式設計 發佈於2024-11-18
  • std::string 是如何實現的以及它與 C 風格字串有何不同?
    std::string 是如何實現的以及它與 C 風格字串有何不同?
    對std::string 實現的探索對std::string 實現的探索神秘的std::string,C 標準庫的基本組件,引發了人們的關注對它的內部運作方式感到好奇。在本文中,我們深入研究其實現,揭示其複雜性,並將其與其前身、無處不在的 C 風格字串區分開來。 各種編譯器工具鏈提供對各自 std ...
    程式設計 發佈於2024-11-18
  • 為什麼 JavaScript 中 (0 < 5 < 3) 的計算結果為 true?
    為什麼 JavaScript 中 (0 < 5 < 3) 的計算結果為 true?
    JavaScript 的比較難題:破解(0 < 5 < 3) 中的真相在JavaScript 領域,出現了一個奇特的觀察結果:為什麼表達式(0 < 5 < 3) 的計算結果為true?這種神秘的行為源自於語言的求值規則,稱為操作順序。 要解開這個謎團,我們必須深入研究表達式執行的操作順序:Paren...
    程式設計 發佈於2024-11-18
  • 如何使用 mitmproxy 修復 Windows 上的「pip install Access Denied」錯誤?
    如何使用 mitmproxy 修復 Windows 上的「pip install Access Denied」錯誤?
    使用mitmproxy 解決Windows 上的「pip install Access Denied」錯誤當嘗試使用pip 在Windows 上安裝mitmproxy 時,使用者可能會遇到儘管以管理員身分執行cmd 或PowerShell,但仍出現「存取被拒絕」錯誤。此錯誤通常在嘗試安裝 crypt...
    程式設計 發佈於2024-11-18
  • 如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    從 Go 二進位檔案擷取程式碼覆蓋率執行單元測試時,擷取程式碼覆蓋率非常簡單。然而,在針對二進位檔案本身的整合測試期間收集覆蓋率指標可能具有挑戰性。有沒有辦法克服這個障礙? 整合測試覆蓋率的需求整合測試提供了比單獨的單元測試更全面的程式碼覆蓋率視圖。透過針對真實世界的輸入運行二進位文件,我們可以評估...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3