在 PowerShell 中查找中间数
Posted
技术标签:
【中文标题】在 PowerShell 中查找中间数【英文标题】:Finding Middle Number in PowerShell 【发布时间】:2019-05-30 14:57:15 【问题描述】:我正在使用 PowerShell 进行练习,并且正在进行用户响应输入,其中一个选项是输入 3 个数字,程序将返回中间数字。我已经这样做了一百万次,似乎我无法让它始终返回中间数字。
例如当我的数字是 1、23452342 和 3 时,它说 3 是中间数字。
这是我的代码:
if ($response -eq 1)
$a = Read-Host "Enter a number "
$b = Read-Host "Enter a second number "
$c = Read-Host "Enter a third number "
if (($a -gt $b -and $a -lt $c) -or ($a -lt $b -and $a -gt $c))
Write-Host "$a is the middle number"
if (($b -gt $a -and $b -lt $c) -or ($b -gt $c -and $b -lt $a))
Write-Host "$b is the middle number"
if (($c -gt $a -and $c -lt $b) -or ($c -gt $b -and $c -lt $a))
Write-Host "$c is the middle number"
【问题讨论】:
建议,在 ISE 或 VSCode 中调试您的代码。也许对它们进行排序并获得第二个。灵感来自(2,5,4 | Sort)[1]
。
您的代码 - 如发布的那样 - 不会做任何事情。 [皱眉] 您需要在第一个 if
之前添加一个 $Response = 1
以使代码不跳过整个块。 ///// 您的代码比较的是数字字符串,而不是数字。 [grin] 所以你需要在比较之前将输入转换为[int]
。 ///// Kory Gill
的建议是一个更好的方法。
@Lee_Dailey 对三个值进行排序当然是获得中位数的一种更简单的方法,但是 OP 仍然需要确保这些值是数字,而不是字符串(这是 Read-Host
返回的内容),所以它们实际上是按数字顺序排序的。
@AnsgarWiechers - 啊!我的意思是说……我希望我可以编辑该评论。 [脸红]
【参考方案1】:
无需进行多次单独比较,只需对三个值进行排序并选择第二个元素即可立即为您提供中位数。但我怀疑实际上让你搞砸的结果是Read-Host
在你需要它们是数值时返回字符串。字符串的排序顺序(“1”
将输入的值转换为整数(如果您希望使用浮点数,则为双精度数)应该可以解决问题:
if ($response -eq 1)
[int]$a = Read-Host 'Enter a number'
[int]$b = Read-Host 'Enter a second number'
[int]$c = Read-Host 'Enter a third number'
$n = ($a, $b, $c | Sort-Object)[1]
Write-Host "$n is the median."
【讨论】:
【参考方案2】:作为一个额外的解决方案,可以在你需要中间项目的任何数组上工作,你可以像这样解决它:
$arr = 1..50
($arr | Sort-Object)[[int](($arr.count -1) /2)]
如果您的数组采用不需要排序的格式,请忽略这部分。
编辑:显然您必须在第一步将数据插入到数组中。
最好的问候
【讨论】:
以上是关于在 PowerShell 中查找中间数的主要内容,如果未能解决你的问题,请参考以下文章
powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。