到目前为止,我在编写此功能时需要帮助:
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"}
}
}
答案 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'
}
}