网站建设风格要求,电影网站做cpa,网站的模板,全屋定制十大品牌排行榜前十名在编程训练中#xff0c;循环结构与条件判断十分重要。
根据条件为真为假确定是否执行循环。
有时#xff0c;根据条件的真假结果#xff0c;决定执行哪些语句#xff0c;这就是分支语句。
为了训练分支语句与循环语句#xff0c;我们设计一个案例#xff1a;
求一组…在编程训练中循环结构与条件判断十分重要。
根据条件为真为假确定是否执行循环。
有时根据条件的真假结果决定执行哪些语句这就是分支语句。
为了训练分支语句与循环语句我们设计一个案例
求一组数字两数平方和为另一数平方
符合条件时有三个数i和j其平方和与k的平方相等。 i*ij*jk*k
或写作 如果满足条件我们将会有一组共三个数字如果有多组数字符合条件将遇到一个棘手问题如何同时存放相关三几个数字如何存放多组这类数字。这是各类语言要解决的重要课题。
为了存储各类数据python中设置了基本数据类型及组合数据类型。对于相关的多数据存储问题首先要考虑的是列表(list)、元组(tuple)、集合(set)和字典(dict)。
对于我们要解决的问题可以考虑用元组(i,j,k)也可以用列表(k,(i,j))更可以用字典{k:(i,j)}。
而对于bash中解决这类问题就不方便了。为了训练运用数组a((i0,j0,k0),(i1,j1,k1),…)
下面结合代码具体讨论数据的存储。
一、python循环与条件判断
由于符合条件的三个数比较多我们仅求一定数据范围内的符合条件的一组数字。
1.列表存储结果
ls[]
for i in range(50,100): for j in range(50,100): for k in range(50,100): if i**2 j**2 k**2: ls.append((k,j,i))
for i in range(len(ls)): print(ls[i]) 2.嵌套列表存储结果
ls[]
for i in range(50,100): for j in range(50,100): for k in range(50,100): if i**2 j**2 k**2: ls.append((k,(j,i)))
for i in range(len(ls)): print(ls[i]) 3.字典存储结果
dict{}
for i in range(40,99): for j in range(40,99): for k in range(40,99): if i**2j**2 k**2: dict[k](i,j)
for key,value in dict.items(): print(key,value) 打印输出时按k值输出不存在重复问题。 二、bash循环与条件判断
求一组数这是一个循环问题:
用什么循环结构forwhile
循环初始条件、结束条件及循环方式
具备什么条件完成什么事情;具体什么条件不做什么事情。
循环离不开条件判断
不同的条件将产生不同的处理结果这就是分支语句。
具体什么条件不做什么事情。可用continue语句这是一类中断处理方式。
下面的分析以for循环为主。
1.选择循环结构
设计i,j,k为循环变量取值范围1-50用for循环表示可以这样写(以i为例): for i in $(seq 50)
也可以: for i in {1..50}
或用C语言风格这样写: for((i1;i50;i)
下面是循环执行的代码用do标记开始用done标记结束。最好各自占用一行其内的代码要缩进或按一次Tab键或按4次空格键
PS:同一脚本文件中要统一使用缩进格式:用Tab就一直用;用4个空格就一直用。不能混用两种格式。有缩进的地方一定要缩进否则会报错。
2.条件判断与循环
主要代码是 k*k i*ij*j
bash支持**和但不支持^。可用i*i或i**
从表达式可以看到:
如果表达式成立交换一下i j也成立。
如何保证仅有一个K值而不是两个K值呢
两种手段:
a.在代码中处理第一组K值打印输出第二组相同K值的不输出
b.全部结果打印输出后去掉重复的K值
为了训练代码处理问题的手段我们重点讨论输出后处理。
a.输出时处理
不输出第二次出现的K值就需要对K值计数:
第一次打印输出;
第二次不输出
设置计数可用变量count也可以简写为cnt
如何设计不打印输出呢
用echo会多出空行。
用echo打印输出其他内容又显多余。
如何处理
这就用到continue语句
当第二次出现k值时什么都不做continue继续下一次循环!
b.输出后处理
用sort进行排序加-u去掉重复的K值
3.输出格式
在表达式成立时如何输出ijk值以什么格式输出
单独输出i j k不合适结果变成一系列数字
把三个数字同时输出在一行可以但仍感觉有什么不妥。
比较合适的格式是:
K: (i,j)
k后加不加:都可以;i j谁在前在后都可以
分析完毕写一份代码供参考。
源代码
输出后处理重复K
for((i1;i50;i))
do for((j1;j50;j)) do for((k1;k50;k)) do if [ $((i*ij*j)) $((k*k)) ] then echo $k: ($i $j) k.txt fi done done
done 不去重效果 与python去重一样可用sort -u -t: -k1,1.2nr
cat k.txt |sort -u -t: -k1,1.2nr 小结
对于多数据的存储python方法较多这与现代高级语言更注重数据处理有关。而bash注重语法与格式的严谨相关。在学习时可以多多体会。