一,while循环:
1,功能:重复执行同一段代码
语法:
while 条件表达式:
# 循环体
当条件表达式的返回值为真时,则执行循环体中的语句,
执行完毕后,重新判断条件表达式的返回值,
如果表达式返回的结果为假,则退出循环体
2,流程图:
3,打印从1到10
1 2 3 4 5 |
# 打印从1到10
n = 1
while n < = 10 :
print (n, end = " " )
n + = 1
|
运行结果:
1 2 3 4 5 6 7 8 9 10
说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/22/python-suan-fa-fen-tang-guo/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]
二,分糖果的题目与解析
1,题目:
10个小孩围成一圈分糖果,老师分给第1个小孩10块,
第2个小孩2块,
第3个小孩8块,
第4个小孩22块,
第5个小孩16块,
第6个小孩4块,
第7个小孩10块,
第8个小孩6块,
第9个小孩14块,
第10个小孩20块。
然后所有糖块数为偶数的小孩将手中的糖分一半给右边的小孩;所有糖块数为奇数的人可向老师要一块再分一半给右边小孩。
问:经过这样几次后大家手中的糖一样多?每人各有多少块糖?
2,解析:
思路:
10个小孩开始时所拥有的糖果数是不同的,但分糖的动作却是相同的,
即“所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块”。
所以是一个典型的可使用循环结构来解决的问题。
将老师开始给每个小孩分配的糖果数作为循环的初始条件,
以“所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块”这个重复的动作作为循环体,
循环的结束条件为所有小孩手中的糖块数一样多。
三,编写代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# 函数:判断列表中各成员是否相等
# candy:保存糖果数量的列表
def judge(candy):
for i in range ( 0 , 10 ):
if candy[ 0 ] ! = candy[i]:
return 1 # 不相同返回1
return 0 # 相同返回0
# 输出列表中每个元素的值
# s: 要打印的列表
# j: 需要打印的次数计数器
def print_result(s, j):
print ( "%4d" % j, end = " " )
for k in range ( 10 ): # 打印列表
print ( "%4d" % s[k], end = " " )
print () # 换行
# 分糖的函数
# sweet: 保存糖果数量的列表
# j: 计数器,记录分糖的次数
def giveSweets(sweet, j):
t = [ 0 ] * 10 # 临时表,保存每次分出去的一半糖
while (judge(sweet)): # 若不满足要求则继续循环
# 将每个孩子手中的糖果数平分为两份,放到t列表中
for i in range ( 0 , 10 ):
if sweet[i] % 2 = = 0 : # 若为偶数则直接分出一半
sweet[i] = sweet[i] / / 2
t[i] = sweet[i]
else : # 若为奇数则加1后再分出一半
sweet[i] = (sweet[i] + 1 ) / / 2
t[i] = sweet[i]
# 将分出的一半糖果t[n] 给右边的孩子 sweet[n + 1]
for n in range ( 0 , 9 ):
sweet[n + 1 ] = sweet[n + 1 ] + t[n]
sweet[ 0 ] + = t[ 9 ] # 第10个分出去的一个t[9],给第一个孩子:sweet[0]
j + = 1 # 计数器加1
print_result(sweet, j) # 打印本次分糖后的结果
# 定义列表sweet,存储老师给每个孩子分配的糖果数
# sweet[0]=10表示第一个小孩的糖果数为10,以此类推
sweet = [ 10 , 2 , 8 , 22 , 16 , 4 , 10 , 6 , 14 , 20 ]
print ( "次数 各人糖果数" )
j = 0 # 计数器,保存分糖的次数
# 输出每个孩子手中的糖果数
print ( "%4d" % j, end = " " )
for i in range ( len (sweet)):
print ( "%4d" % sweet[i], end = " " )
print ()
# 开始分糖
giveSweets(sweet, j) # 调用分糖果函数
|
运行结果:
次数 各人糖果数
0 10 2 8 22 16 4 10 6 14 20
1 15 6 5 15 19 10 7 8 10 17
2 17 11 6 11 18 15 9 8 9 14
3 16 15 9 9 15 17 13 9 9 12
4 14 16 13 10 13 17 16 12 10 11
5 13 15 15 12 12 16 17 14 11 11
6 13 15 16 14 12 14 17 16 13 12
7 13 15 16 15 13 13 16 17 15 13
8 14 15 16 16 15 14 15 17 17 15
9 15 15 16 16 16 15 15 17 18 17
10 17 16 16 16 16 16 16 17 18 18
11 18 17 16 16 16 16 16 17 18 18
12 18 18 17 16 16 16 16 17 18 18
13 18 18 18 17 16 16 16 17 18 18
14 18 18 18 18 17 16 16 17 18 18
15 18 18 18 18 18 17 16 17 18 18
16 18 18 18 18 18 18 17 17 18 18
17 18 18 18 18 18 18 18 18 18 18
阅读: 61
标签:10,15,17,16,python,18,算法,sweet,糖果
From: https://www.cnblogs.com/architectforest/p/18195448