python中的for语句可以在任意序列_Python练习题详解之分支和循环(小白友好)

你好!欢迎来到Python练习题详解系列。为了让小白(也就是我本人)更好的理解代码,打好编程基础,我决定仔细地解说一些练习题。欢迎观看!奥利给!

在开始练习题详解前,我们来复习一下,下列题目会涉及到的概念:

1. 条件表达式(三元操作符)语法:x if 条件 else y

2. for 循环 :for循环与while相比更加通用,他是一个通用的序列迭代工具,可以遍历任何有序的序列对象内的元素。 for循环在循环完所有满足条件的项以后, 会自动结束。语法:For 目标 in 表达式

3. range ()

-range()的作用是生成从start参数的值开始到stop参数的值结束的数字序列。注意,序列中一定没有stop的原数,比如说,range(5),会输出0,1,2,3,4,没有5 。

-语法: range ( [start, ] stop [ , step = 1]) ,中括号是可有可无的;

-start 代表开始的数值

-step 代表数字的间隔;比如

4. break 和 continue

break作用是跳出循环;

continue作用是终止本轮循环,并开始下一轮循环,在开始下一轮之前会先测试一下循环条件,只有条件为true的时候才会开始下一轮循环。如果不true的话,就会退出循环。

举个栗子~

OK,进入题目part啦。

题目1

请将以下代码修改为三元操作符实现:

思路:

条件表达式的语法是,x if 条件 else y。我们仔细看一下上面这些代码,会发现它想找出x,y,z中最小的那个数字。那我们就逐一比较就好了。

答案:

small = x if (( x < y) and (x < z)) else (y if (y < z) else z)

题目2

设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含" * ",机会则不计算在内。如图:

思路:看完这个题目,聪明的你有没有发现,这里面需要一个循环来让用户循环输入密码,和两个分支,一个用来控制“ * ”号的输入,另一个用来控制密码的正确与否。

那么,如果是两个分支,我们就可以用elif(else if的缩写)来简化我们的代码。

我们的思维图如下:

答案:

题目3

编写一个程序,输出 100~999 之间的所有水仙花数。(如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。)

思路:水仙花数,听起来真好听,实则暗藏杀机,是个坏人。如何才能解决这个棘手的问题呢,我们需要先把一个三位数分成个位,十位,百位。为了达到我们的目标,我们要让这个三位数经历一些除法。

方法1:

举个栗子:

153 % 10 = 3 ,这就是我们的个位数。

153 // 10 = 15 ,15 % 10 = 5,这就得出我们的十位数。

153 // 10 = 15,15 // 10 = 1,这就是我们的百位数。

想出这个办法之后,我们的答案1就诞生了:

在答案1中,我们做一个for循环,for i in range(100, 1000): 这句代码代表 i 在100到999遍历,也就是它会自己运行 i += 1的代码,直到999. (这里是羊哥提醒我的,我刚学for,还不熟悉,傻傻的在最后加了一句 i += 1,其实duck 不必!)。

然后我们给三个变量 x, y,z 分别赋上个位数,十位数,百位数的三次方的值,这里记得幂运算前面的除法一定一定一定要加括号,因为在运算优先级中,**幂运算是最优先的!(这里也是羊哥提醒,没有羊哥我就还在纠结,我到底那里写错了呢,就没办法出现在这里写详解了!感恩羊哥!)

最后呢我们让sum = xyz之和,当sum 和 i 的数字一样,就说明符合水仙花的条件啦!成为一朵花好麻烦噢!不过值得!!Run出来就是下面这个样子啦:

方法2:

话不多说,先附上答案(不是我写的,是b站小甲鱼老师写的,我就是他的视频学的!)

这里,他把x y z的运算集合到while循环里面,非常非常巧妙,牛牛牛!相信经过第一个方法之后,聪明的你应该可以很快看懂这个方法~ 在第二和第五行中,一开始让sum = 0,然后慢慢给sum 赋值,最后,sum就变成个位数十位数百位数之和啦!真好!智慧的力量啊!

题目4 三色球问题

有红、黄、绿三种颜色的球球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。如图所示:

思路:

题目要求从中任意摸8个球,其中绿色球有6个,那就说明红球和黄球的个数加起来要至少有两个,才能组合成功。

对于这种组合题目,我们可以在for 循环里面再加一个for,听起来好像有点复杂,在for 里面再加一个for,是什么意思呢?举一个简单的例子,相信聪明的你一定能看懂~

run出来是这样的~

也就是说,第二个for会在第一个for的每一次遍历增加的 i 里遍历整个 j 的range。如果我们在for red in range (0,4)里面,再加上一个for yellow in range (0,4),组合起来就是,当红球有0个,黄球有1,2,3,4个;当红球有1个,黄球有1,2,3,4个……

然后,我们的思路就是,当红球和黄球加起来至少为2个的时候,计算出绿色球的数量,绿色球的数量就是 8 - 红 - 黄。就能print出我们的结果。

答案1:

这里小伙伴可能会疑惑,“ \t " 是什么东西呀,嘻嘻,这里的 “ \t "  是一个制表符。作用是对其表格的列。举个栗子:

run:

答案2:

在这里还有小甲鱼老师写的答案2,也是非常巧妙的省去了 if 的判断过程,直接让绿色球的range变成(2,7),让绿色球从 2 开始参与循环,因为绿球不可能是0,1,当绿球时0,1时,就无法满足总数为8的条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值