嘗試尋求 Perl 專家對這個簡單分數評分的反饋。我想出的是使用條件運算子來模擬多路分支,但想知道是否有更簡單/直接的語法來表達以增強可讀性(和未來的可維護性)。
來自 Python/C,并學習了這種新語言,所以我嘗試探索新的語法。如果這聽起來太天真了。
my $grade =
($score < 60) ? "F" :
($score < 68) ? "C" :
($score < 75) ? "B" :
($score < 90) ? "B " :
($score < 95) ? "A" :
($score <= 100) ? "A " :
"No Grade"; # catch-all default
uj5u.com熱心網友回復:
您要么需要一個包含 101 個條目的哈希陣列,要么需要一個包含 21 個和特殊情況的哈希陣列。以這種方式使用散列陣列的優化將毫無理由地為時過早。
在類似情況下,人們通常會使用散列或陣列作為調度表,但在這里它不起作用,因為您必須包含所有可能的值。
好吧,也許不是所有可能的價值。例如,我們可以截斷數字以洗掉小數點。如果所有的值都可以被 5 整除,那么我們除以 5 即可獲得可管理的 21 個值。然后可以使用調度表。(雖然陣列比散列更有效。)
那 68 意味著我們不能那樣做。65、66 和 67,或 68 和 69 都需要特例。100 也是一個特殊值,因為您顯然希望容忍無效輸入。除非性能至關重要,否則這表明設計不佳。
假設優化是有保證的。
您可以設定以下表格:
my @grades_lkup;
$grades_lkup[ $_ ] = "F" for 0 .. 59;
$grades_lkup[ $_ ] = "C" for 60 .. 67;
$grades_lkup[ $_ ] = "B" for 68 .. 74;
$grades_lkup[ $_ ] = "B " for 75 .. 89;
$grades_lkup[ $_ ] = "A" for 90 .. 94;
$grades_lkup[ $_ ] = "A " for 95 .. 100;
那么你所需要的就是
my $grade = $grades_lkup[ $score ] // "No Grade";
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506232.html
標籤:perl
下一篇:關于散列和陣列的perl代碼解釋
