首页 > 解决方案 > 使用范围打印字母等级的powershell函数

问题描述

到目前为止,我得到了编写此功能的需要帮助:

   if (grades$Final[i] >=90) {
         "A"
      }
      else if (grades$Final[i] >=80){
         "B"
      }
      else if(grades$Final[i] >=70){
         "C"
      }
      else if(grades$Final[i] >=60){
         "D"
      }
      else {"F"}
      }
}

标签: powershell

解决方案


您好,在这种情况下,我建议使用 aswitch而不是一堆If语句

在powershell中我们使用-lt(小于) -gt(大于) -eq(等于) -ge(大于或等于) -le(小于或等于)

我注意到您正在使用[i]我假设的数组中调用索引。在 powershell 中,您可以使用管道|. 因此,您可以获取一个数组并将其通过管道传递给一个函数。您可以使用@().

@("Hello","World") | Foreach-object{
    "$_ TEST"
}

输出

Hello TEST
World TEST

所以我打赌你想知道$_是什么。好吧,当您像上面的示例一样通过管道传递它的对象时,因为数组有 2 个条目,第一个循环等于Hello,第二次等于World

所以这里有一个函数可以让 Int 对字母进行评分。正如您在底部管道中看到的那样将 Ints 导入函数

function Get-LetterGrade(){
    param(
        [Parameter(Position=1, ValueFromPipeline=$true)]
        [int]$Grade
    )
    process{
        switch($Grade){
             {$_ -ge 90} { "A" } 
             {$_ -ge 80 -and $_ -lt 90} { "B" }
             {$_ -ge 70 -and $_ -lt 80} { "C" }
             {$_ -ge 60 -and $_ -lt 70} { "D" }
             {$_ -lt 60} { "F" }
        }
    }
}

90,80,70,60,50 | Get-LetterGrade

输出将是

A
B
C
D
F

推荐阅读