Powershell功能可打印一定范围的字母等级

时间:2019-02-06 13:57:25

标签: 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"}
      }
}

2 个答案:

答案 0 :(得分:2)

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

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

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

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

输出

Hello TEST
World TEST

所以我敢打赌,您想知道$_是什么。好吧,当您通过管道传递对象时,如上例所示,由于数组有2个条目,因此第一个循环等于 Hello ,第二次循环等于 World < / p>

因此,这是一个将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

答案 1 :(得分:1)

在Powershell中,数字比较运算符有些不同...

  

是-gt   <是-lt   =是-ge

在Powershell中有大量关于比较运算符的文档,您可以通过Google获得。

“ else if”将为“ elseif”。您的变量名有点奇怪。在Powershell中,我们以美元符号“ $”开头的变量名。看起来好像您有一个名为“ grades $ Final”的数组。令人困惑。遵守变量名的约定;描述性的并遵守命名规则。

如果我不得不重新编写您的逻辑,我会使用类似...

$grades = @(12, 78, 83, 92)

foreach ($grade in $grades) {
    if ($grade -ge 90) {
        write-output 'A'
    } elseif ($grade -lt 90 -and $grade -ge 80) {
        write-output 'B'
    } elseif ($grade -lt 80 -and $grade -ge 70) {
        write-output 'C'
    } elseif ($grade -lt 70 -and $grade -ge 60) {
        write-output 'D'
    } elseif ($grade -lt 60) {
        write-output 'F'
    }
}