灯箱网站开发,wordpress商品分类目录,wordpress 编辑器推荐,做国际网站多少钱在Python编程中#xff0c;有列表、元组和字典三类变量可以使用#xff0c;方便数据的存储与处理#xff0c;而bash中仅有字符串变量、数组、函数可用#xff0c;方法运用上受到限制#xff0c;这与bash基于C语言#xff0c;注重语法结构的严谨有关。而Python等高级语言更…在Python编程中有列表、元组和字典三类变量可以使用方便数据的存储与处理而bash中仅有字符串变量、数组、函数可用方法运用上受到限制这与bash基于C语言注重语法结构的严谨有关。而Python等高级语言更侧重于数据的组合与复用方便处理也与现代内存增大价格低廉有关。
本文在介绍python使用的同时重点讨论用bash编程求水仙花数。
水仙花数指一个三位数:每位数的3次方之和等于这个数。
例如:153是一个水仙花数1531^35^33^3
我们本案例目标打印输出所有的水仙花数从小数开始升序。每行一个。
一、python语言实现
用python语言实现输出水仙花数的功能十分方便。
首先设置一个循环变量一个3位数的整数从100取值开始一一验证每位数的3次方相加与此数相比较相等为水仙花数记录、打印不相等时变量取值自动加1再进行验证如此循环直到999为止。如此就可以查找并打印出所有的水仙花数。
for循环
for i in range(100,1000)
python循环取值:开始100结束1000-11000不取值
对于每一个数要计算其每位数的3次方之和有多种方法
1.先转$i为字符型数据再对每一位切片求出其整数之3次方
2.由$i对10求余求模得到每一位数求出其整数之3次方
定义一个变量sum记录每一个数的各位数之3次方之和
1.由求余数计算立方和
for i in range(100,1000): sum int(i%10)**3int(i/10%10)**3int(i/100%10)**3 if sum i: print(i) 2.由字符切片获得各位数
a.用pow函数求3次方
由切片可以获得字符串的各个元素再转为整型数值用pow函数求3次方
for i in range(100,1000): num str(i) hundred int(num[0]) # 百位数 ten int(num[1]) # 十位数 one int(num[2]) # 个位数 if (pow(one,3) pow(ten,3) pow(hundred,3)) i: print(i) b.用m**n计算m的n次方
由切片可以获得字符串的各个元素再转为整型数值用m**n计算m的n次方
for i in range(100,1000): num str(i) hundred int(num[0]) # 百位数 ten int(num[1]) # 十位数 one int(num[2]) # 个位数 if int(num[0])**3 int(num[1])**3 int(num[2])**3 i: print(i) 3.由函数达得目标
用定义函数来进行测试。
def is_num(n): if n 100 or n 999: return False sum 0 for j in str(n): sum int(j) ** 3 return n sum if __name__ __main__: for i in range(100,1000): if is_num(i): print(i) 二、bash语言实现
Linux下用bash语言实现输出水仙花数的功能,方法和代码基本上与python相同。
除循环结构写法不太一样对变量的处理也有稍微差别。思路与方法相同就可以快速改写完成目标。
1.多层for循环嵌套
#!/bin/bash # 求水仙花数
for((i1;i10;i))
do for((j0;j10;j)) do for((k0;k10;k)) do a$((i**3j**3k**3)) b$((i*100j*10k)) if [ $a -eq $b ];then echo $a fi done done
done 把一个三位数取得每一位数字这里用了最直观的想法
取每一位数字再计算3次方相加就可以了。
更有效率的方法是不断地除10取余。
2.while循环求数字的各位数
#!/bin/bash
for ((i100;i999;i))
do sum0 n$i while [ $n -gt 0 ] do m$((n%10)) # 通过对10求余数第一次得到个位数 sum$((summ*m*m)) # 每次求出位数的3次方进行累加 n$((n/10)) # 个位数处理完后再把原数对10取整 # 据此进行第二次循环第三次循环 done if [ $sum -eq $i ];then echo $i fi
done 题外话
bash代码求四季花数:
取一个四位数如果它的每个位上的数字的4次方和与自身相等则可以称之为四季花数。
与3位的水仙花数相同计算每位数的4次方之和再验证是否等于这个四位数。
我们修改一下水仙花数求解代码在命令行执行。写成一行代码方便快速执行。
for ((i1000;i9999;i)); do sum0; n$i; while [ $n -gt 0 ];do k$((n%10)); sum$((sumk*k*k*k)); n$((n/10)); done; if [ $sum -eq $i ]; then echo 四季花数是 $i; fi; done 扩展设想
其实这类问题还可以扩展为更一般的问题
有一个N位数如果它的每一位数字的N次方之和等于自身则称它为N阶的花朵数。
请求出所有的10阶花朵数。
这个问题就要考虑效率了感兴趣的可以深入探讨。