Powershell 基础版
Powershell Basic
我必须在 PowerShell 上为我的编码入门课程做一个简单的计算器 +
、-
、*
和 /
。为什么我的变量 Valeur1
和 Valeur2
在整数验证期间没有保持原样?我的 4 个选项给出了一个随机答案并且不记得我的 2 Read-Host
个变量的初始值。
Write-Host "Microsoft Powershell Calculator "
$R = $True
$OK = $True
while ($R -eq $True) {
do {
$Valeur1 = [int]::TryParse((Read-Host "Entrez une premiere valeur numerique"), [ref]$OK)
if (-not $OK) {
Write-Host ("ERREUR ! Vous devez entrez une valeur numerique")
$OK = $false
}
else{
$OK = $true
}
} while (-not $OK)
do {
$Valeur2 = [int]::TryParse((Read-Host "Entrez une seconde valeur numerique"), [ref]$OK)
if (-not $OK) {
Write-Host ("ERREUR ! Vous devez entrez une valeur numerique")
$OK = $false
}
else{
$OK = $true
}
} while (-not $OK)
$operation = Read-Host -prompt "Quelle opération voulez-vous réaliser? Choisissez entre [+, -, *, or /] "
Switch($operation)
{
-
{
Write-Host("Le resultat de votre soustraction est :")
$Valeur1 - $Valeur2
}
+
{
Write-Host("Le resultat de votre addition est :")
$Valeur1 + $Valeur2
}
*
{
Write-Host("Le resultat de votre multiplication est :")
$Valeur1 * $Valeur2
}
/
{
Write-Host("Le resultat de votre division est :")
$Valeur1 / $Valeur2
}
default
{
Write-Host("Option Invalide")
}
}
$choix = Read-Host "Desirez-vous continuer? Y/N"
if($choix -eq "Yes"){
$R = $true
}
if($choix -eq "Y"){
$R = $true
}
else{
$R = $false
exit
}
}
来自Int32.TryParse(String, Int32)
Documentation:
result
Int32
When this method returns, contains the 32-bit signed integer value equivalent of the number contained in s
, if the conversion succeeded, or zero if the conversion failed.
当您执行 [ref]$OK
时,如果转换成功,此变量将保存 parsed 您的 .TryParse
操作,但是,您将在 if
和 else
条件($OK = $true
和 $OK = $false
)上覆盖此值。
此外,.TryParse
方法的输出将是 $true
/ $false
,具体取决于操作是否成功(此布尔值将分配给 $valeur1
和 $valeur2
因为两个变量都赋值了这个操作)。
Returns Boolean
true
if s
was converted successfully; otherwise, false
.
这是您的代码的一个简化的工作变体。值得一提的是,由于您正在执行 2 个解析操作,因此持有相同逻辑的 function (ParseInput
) 会更有意义,这样代码就不会重复。
Write-Host "Microsoft Powershell Calculator V3"
function ParseInput {
$ref = ''
do {
$parsed = [int]::TryParse((Read-Host "Entrez une premiere valeur numerique"), [ref]$ref)
if (-not $parsed) {
Write-Host "ERREUR ! Vous devez entrez une valeur numerique"
}
} while (-not $parsed)
$ref
}
$R = $true
while ($R) {
$Valeur1 = ParseInput
$Valeur2 = ParseInput
$operation = Read-Host "Quelle opération voulez-vous réaliser? Choisissez entre [+, -, *, or /] "
Switch($operation) {
- {
Write-Host "Le resultat de votre soustraction est :"
$Valeur1 - $Valeur2
}
+ {
Write-Host "Le resultat de votre addition est :"
$Valeur1 + $Valeur2
}
* {
Write-Host "Le resultat de votre multiplication est :"
$Valeur1 * $Valeur2
}
/ {
Write-Host "Le resultat de votre division est :"
$Valeur1 / $Valeur2
}
default {
Write-Host "Option Invalide"
}
}
$choix = Read-Host "Desirez-vous continuer? Y/N"
if($choix -notmatch "^(Yes|Y)$") {
$R = $false
}
}
我必须在 PowerShell 上为我的编码入门课程做一个简单的计算器 +
、-
、*
和 /
。为什么我的变量 Valeur1
和 Valeur2
在整数验证期间没有保持原样?我的 4 个选项给出了一个随机答案并且不记得我的 2 Read-Host
个变量的初始值。
Write-Host "Microsoft Powershell Calculator "
$R = $True
$OK = $True
while ($R -eq $True) {
do {
$Valeur1 = [int]::TryParse((Read-Host "Entrez une premiere valeur numerique"), [ref]$OK)
if (-not $OK) {
Write-Host ("ERREUR ! Vous devez entrez une valeur numerique")
$OK = $false
}
else{
$OK = $true
}
} while (-not $OK)
do {
$Valeur2 = [int]::TryParse((Read-Host "Entrez une seconde valeur numerique"), [ref]$OK)
if (-not $OK) {
Write-Host ("ERREUR ! Vous devez entrez une valeur numerique")
$OK = $false
}
else{
$OK = $true
}
} while (-not $OK)
$operation = Read-Host -prompt "Quelle opération voulez-vous réaliser? Choisissez entre [+, -, *, or /] "
Switch($operation)
{
-
{
Write-Host("Le resultat de votre soustraction est :")
$Valeur1 - $Valeur2
}
+
{
Write-Host("Le resultat de votre addition est :")
$Valeur1 + $Valeur2
}
*
{
Write-Host("Le resultat de votre multiplication est :")
$Valeur1 * $Valeur2
}
/
{
Write-Host("Le resultat de votre division est :")
$Valeur1 / $Valeur2
}
default
{
Write-Host("Option Invalide")
}
}
$choix = Read-Host "Desirez-vous continuer? Y/N"
if($choix -eq "Yes"){
$R = $true
}
if($choix -eq "Y"){
$R = $true
}
else{
$R = $false
exit
}
}
来自Int32.TryParse(String, Int32)
Documentation:
result
Int32
When this method returns, contains the 32-bit signed integer value equivalent of the number contained ins
, if the conversion succeeded, or zero if the conversion failed.
当您执行 [ref]$OK
时,如果转换成功,此变量将保存 parsed 您的 .TryParse
操作,但是,您将在 if
和 else
条件($OK = $true
和 $OK = $false
)上覆盖此值。
此外,.TryParse
方法的输出将是 $true
/ $false
,具体取决于操作是否成功(此布尔值将分配给 $valeur1
和 $valeur2
因为两个变量都赋值了这个操作)。
Returns
Boolean
true
ifs
was converted successfully; otherwise,false
.
这是您的代码的一个简化的工作变体。值得一提的是,由于您正在执行 2 个解析操作,因此持有相同逻辑的 function (ParseInput
) 会更有意义,这样代码就不会重复。
Write-Host "Microsoft Powershell Calculator V3"
function ParseInput {
$ref = ''
do {
$parsed = [int]::TryParse((Read-Host "Entrez une premiere valeur numerique"), [ref]$ref)
if (-not $parsed) {
Write-Host "ERREUR ! Vous devez entrez une valeur numerique"
}
} while (-not $parsed)
$ref
}
$R = $true
while ($R) {
$Valeur1 = ParseInput
$Valeur2 = ParseInput
$operation = Read-Host "Quelle opération voulez-vous réaliser? Choisissez entre [+, -, *, or /] "
Switch($operation) {
- {
Write-Host "Le resultat de votre soustraction est :"
$Valeur1 - $Valeur2
}
+ {
Write-Host "Le resultat de votre addition est :"
$Valeur1 + $Valeur2
}
* {
Write-Host "Le resultat de votre multiplication est :"
$Valeur1 * $Valeur2
}
/ {
Write-Host "Le resultat de votre division est :"
$Valeur1 / $Valeur2
}
default {
Write-Host "Option Invalide"
}
}
$choix = Read-Host "Desirez-vous continuer? Y/N"
if($choix -notmatch "^(Yes|Y)$") {
$R = $false
}
}