PowerShell 逻辑控制语句基础练习

这篇博客介绍了PowerShell中逻辑控制语句的应用,包括字符类型的判断,数学模型如水仙花数、完全平方数和质数的计算。文章详细讲解了如何判断素数,并提供了一个简化的方法。此外,还涉及了打印乘法表和三角形的实现,以及经典的冒泡排序算法。

1.判断字符类型

#1.从键盘输入一个字符,判断这个字符是数字、字母(区分大小写)还是符号
#方法①用正则循环判断
for(1 -eq 1){                       #死循环
    [char]$ch=read-Host "请输入一个字符"
    $a="\d{1}"
    $b="[a-z]{1}"
    $c="[A-Z]{1}"
    if($ch -cmatch $a){                      #cmatch:判断字符串是否匹配给定的表达式,区分大小写
        Write-Output($ch+":是一个数字")
    }elseif($ch -cmatch $b){
        Write-Output($ch+":是小写字母")
    }elseif($ch -cmatch $c){
        Write-Output($ch+":是大写字母")
    }else{
        Write-Output($ch+":是符号")
    }
    return                                          #退出循环
}

#方法②用类型转换后对应ASCII表判断
While(1 -eq 1){
    [char]$str = Read-Host "请输入1个字符"
    [int]$asc = [char]$str   
    if($asc -ge 48 -and $asc -le 57){
        Write-Output ($str + ":这个字符是数字")       
        }
        elseif($asc -ge 65 -and $asc -le 90){
        Write-Output ($str + ":这个字符是大写字母")
        }
        elseif($asc -ge 97 -and $asc -le 122){
        Write-Output ($str + ":这个字符是小写字母")
        }
        else{
        Write-Output ($str + ":这个字符是符号")
        }
        break
}
#从键盘输入一个字符串,判断该字符串是否可以被转换为一个有效数字
#方法①用类型转换后对应ASCII表判断
#ascii表十进制48-57表示字符[0-9],65-90表示字符[A-Z],97-122表示字符[a-z],其余表示符号
[string]$str = Read-Host "请输入1个字符串"
[char[]]$ascii = $str.ToCharArray()         #ToCharArray:将字符串类型转换成字符存入数组中
$a,$b,$c,$d = 0,0,0,0
for($i = 0 ;$i -lt $ascii.Length; $i++){
    [int]$num = [int]$ascii[$i]
    if(($num -ge 48) -and ($num -le 57)){           
    $a++
    }elseif(($num -ge 65) -and ($num -le 90)){
    $b++
    }elseif(($num -ge 97) -and ($num -le 122)){
    $c++
    }else{
    $d++
    }
}
write-output ("$str `n数字:$a 个;大写字母:$b 个;小写字母:$c 个;字符:$d 个。" )

#方法①用正则循环判断
[string]$str = Read-Host "请输入1个字符串"
[char[]]$ascii = $str.ToCharArray()         #ToCharArray:将字符串类型转换成字符存入数组中
$a,$b,$c,$d = 0,0,0,0
for($i = 0 ;$i -lt $str.Length; $i++){
    #[int]$num = [int]$ascii[$i]
    if($str[$i] -match "[0-9]"){
    $a++
    }elseif($str[$i] -cmatch "[A-Z]"){        #cmatch:判断字符串是否匹配给定的表达式,区分大小写
    $b++
    }elseif($str[$i] -cmatch "[a-z]"){
    $c++
    }else{
    $d++
    }
}
write-output ("$str `n数字:$a 个;大写字母:$b 个;小写字母:$c 个;字符:$d 个。" )

#字符串判断:从键盘输入一个字符串,判断该字符串是否可以转换成一个有效数字
#有效数字,一串有[0-9.]数字和小数点组成的字符串、浮点数或者一个[0-9]的字符
[string]$str = Read-Host "请输入一个字符串"
[int]$a = $str.Length
for($i = 1;$i -le $a;$i++){
    [string]$char_tem = $str.Substring($i-1,1)           #substring(start,length):string类型中的截取字符串方法,判断每一个字符是否属于[0-9]数字
     if($char_tem -notmatch "[0-9.]"){               #notmatch判断左边字符串是否不匹配右边给的正则表达式
     Write-Output "你输入的字符串不可以转换为一个有效的数字。"
     break;                                            #只要其中有一个字符不属于[0-9.]就退出循环,这个字符串就不能转换成有效数字
     }elseif ( $i -eq $a){                              #若字符串完全由[0-9.]之间的数字组成且字符串长度与循环次数相等返回ture
     Write-Output "你输入的字符串可以转换为一个有效的数字"
     }
}

<#拆分字符串:“网络空间安全”,拆分成“网络”,“络空”,
“空间”,“间安”,“安全”
#>
[string]$str_1 = "网络空间安全"
for($i = 0;$i -lt $str_1.Length-1;$i++){ 
    $char_2 = $str_1.substring($i,2)           #substring:string类型中的截取字符串方法,判断每一个字符是否属于[0-9]数字
    Write-Output ("{0}" -f $char_2) 
}


2.常见数学模型

水仙花数
#计算三位整数(100~999)的水仙花数
for($i = 100;$i -lt 999; [int]$i = $i +1){
    [string]$num = $i
    [int]$num_1 = $num.Substring(0,1)             #substring:string类型中的截取字符串方法,判断每一个字符是否属于[0-9]数字
    [int]$num_2 = $num.Substring(1,1)
    [int]$num_3 = $num.Substring(2)
    $tem_sum = ($num_1*$num_1*$num_1)+($num_2*$num_2*$num_2)+($num_3*$num_3*$num_3)
    if($tem_sum -eq $num){
    Write-Output ("水仙花数:"+$num)
    }
}
完全平方数
#一个10000以内的整数,它加上100和加上268以后都是一个完全平方数,请问该数是多少?
#完全平方数是10000以内的整数,100的平方是10000,所以该数取值范围在[0-100]
#加100和加268是两个if判断
#需要修改
for($i = 1;$i -lt 10000;$i++){
    $sum_1 = $i + 100
    $sum_2 = $i + 268
    for($j = 1;$j -le 100;$j++){
        $square_1 = ($j * $j)
        if($sum_1 -eq $square_1){
            for($k = 1;$k -le 100;$k++){
                $square_2 = ($k * $k)
            }if($sum_2 -eq $square_2){
                Write-Output "该数是 $i"
            }
    }
    }
}


质数
  1. 因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
  2. 另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
  • 原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=28,2 小于 4,8 大于 4,16=44,4=√16,因此只需判定在 2~4 之间有无因子即可。
#计算1000以内的所有质数(只能被1和其自身整除的数)
#最小质数为2

for($i = 2;$i -lt 1000;$i++){
    for($j = 2;$j -le $i;$j++){
        [int]$remainder = $i % $j                                #定义余数为整性,防止powershell小数自动四舍五入
        if($remainder -eq 0){
            if($i -ne $j){
                break;
            }else{
            Write-Output "$i"
            }
        }
    }
}

3.打印乘法表、三角形

#打印99乘法表
for($i = 1; $i -le 9; $i++){
for($j = 1; $j -le $i; $j++){
Write-Host $("{0}x{1}={2} " -f $i,$j,($i*$j)) -NoNewline
}
Write-Host
}

#打印出倒直角三角形
for($i = 0;$i -lt 6;$i++){
    for($j = 6;$j -gt $i;$j--){
        Write-Host "*"-NoNewline
        } 
    Write-Host ""
} 

#打印出等腰三角形
for($i=1;$i -le 5;$i++){
    for($j=1;$j-le 5-$i;$j++){
        Write-Host (" ")-NoNewline
    }
    for($j=1;$j-le (2*$i-1);$j++){
        Write-Host ("*")-NoNewline
    }
    Write-Host ("")
}

4.常见算法

冒泡排序
#对数组3,65,22,102,4进行冒泡排序
$array_num = 3,65,22,102,4
$x_num = @()                           #定义一个空数组
for($i = 0;$i -lt $array_num.Length-1;$i++){    #外循环为排序次数,循环length-1次
    for($j = 0;$j -lt $array_num.Length-$i-1;$j++){     #内循环为每外循环1次内循环比较的次数,第i次外循环比较length-i次
        if($array_num[$j] -gt $array_num[$j+1]){
        $x_num = $array_num[$j]            #将大的数字赋给空数组
        $array_num[$j] = $array_num[$j+1]      #将大的数字的和小的数字换位
        $array_num[$j+1] = $x_num            
}
}   
}

foreach($index in $array_num){
    Write-Host $index
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值