欢迎来到 Kong Xiangqun 的博客

day6. while双项循环及for循环

一、双向循环经典练习

1.打印十行十列小星星(2个循环)

# j 外循环用来控制行数
j = 0
while j<10:

    # 打印一行十个星星
    i = 0
    while i <10:
        # 写上循环的逻辑
        print("*",end="")
        i+=1
        
    # 打印换行
    print()


    j+=1
View Code

2.打印十行十列小星星(隔列换色小星星,两个循环)

i = 0
while i<10:
    # 打印隔列换色星星
    j = 0
    while j < 10:
        if j % 2 == 0:
            print("",end="")
        else:
            print("",end="")
        j+=1

    # 打印换行
    print()
    i+=1
View Code

3.打印十行十列小星星(隔行换色小星星,两个循环)

"""外层循环动一次,内层循环动10次,外层循环动的慢,内层循环动的快"""
i = 0
while i<10:
    # 打印隔列换色星星
    j = 0
    while j < 10:
        if i % 2 == 0:
            print("",end="")
        else:
            print("",end="")
        j+=1

    # 打印换行
    print()
    i+=1
View Code

4.99乘法表

方式一

# i控制行
i = 1
while i <= 9:
    # j 控制列
    # 打印表达式
    j = 1
    while j<=i:
        # 打印表达式 谁*谁=谁 %2d 默认居右显示
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
    
    # 打印换行
    print()
    i+=1
View Code

方式二

print("<=====>")
# i控制行
i = 9
while i >= 1:
    # j 控制列
    # 打印表达式
    j = 1
    while j<=i:
        # 打印表达式 谁*谁=谁 %2d 默认居右显示
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
    
    # 打印换行
    print()
    i-=1
View Code

5. 99乘法表按方式一纵轴向右折叠

i = 1
while i<=9:
    
    # 1.打印空格
    """
    第一行循环8组空格 8~1 是循环8组空格
    第二行循环7组空格 7~1 是循环7组空格
    ...
    第八行循环1组空格 1 是循环1组空格
    第九行 不需要空格 所以 k>0
    """
    k = 9 - i
    while k>0:
        print("       " , end="")
        k -= 1 

    # 2.打印表达式 
    """"""
    j = 1
    while j<=i:
        # 打印表达式 谁*谁=谁 %2d 默认居右显示
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
        
    # 3.打印换行
    print()
    
    i+=1
View Code

6. 99乘法表按方式二纵轴向右折叠

i = 9
while i>=1:
    
    # 1.打印空格
    """
    第一行循环8组空格 8~1 是循环8组空格
    第二行循环7组空格 7~1 是循环7组空格
    ...
    第八行循环1组空格 1 是循环1组空格
    第九行 不需要空格 所以 k>0
    """
    k = 9 - i
    while k>0:
        print("       " , end="")
        k -= 1 

    # 2.打印表达式 
    j = 1
    while j<=i:
        # 打印表达式 谁*谁=谁 %2d 默认居右显示
        print("%d*%d=%2d " % (i,j,i*j),end="")
        j+=1
        
    # 3.打印换行
    print()
    
    i-=1
View Code

7. 求吉利数字100 ~ 999  666 888 111 222 333  444 ... 123 789 567 765 432

方法一

"""
个位:987 % 10 = 7
十位:987 // 10 % 10 = 8
百位:987 // 100 = 9
"""
i = 100
while i<1000:
    gewei = i % 10
    shiwei = i // 10 % 10
    baiwei = i // 100
    
    if gewei == shiwei and shiwei == baiwei:
        print(i)
        
    #123
    elif shiwei  == gewei-1 and  shiwei == baiwei+1:
        print(i)
        
    #765
    elif shiwei == gewei+1 and shiwei == baiwei-1:
        print(i)
    i+=1
View Code

方法二

i = 100
while i<1000:
    strvar = str(i) # "123"
    baiwei = int(strvar[0])
    shiwei = int(strvar[1])
    gewei = int(strvar[-1])
    if gewei == shiwei and shiwei == baiwei:
        print(i)
        
    #123
    elif shiwei  == gewei-1 and  shiwei == baiwei+1:
        print(i)
        
    #765
    elif shiwei == gewei+1 and shiwei == baiwei-1:
        print(i)
    i+=1
View Code

8.百钱买百鸡

"""
公鸡x 母鸡y 小鸡z
公鸡1块钱1只,母鸡3块钱一只,小鸡5毛钱一只
问: 用100块钱买100只鸡,有多少种买法?
"""
"""
穷举法:把数拿出来,一个一个试
x{1,2}
y{3,4}
z{5,6}
x+y+z = 10 列出来
1+3+5 = 9 不要
1+3+6 = 10 要
1+4+5 = 10 要
1+4+6 = 11 不要

2 + 3 + 5 = 10 要
2 + 3 + 6 = 11 不要
2 + 4 + 5 = 11 不要
2 + 4 + 6 = 12 不要
"""

"""
# 两个条件同时满足
x+y+z = 100
x*1 + y*3 + z*0.5 = 100
"""

# 公鸡
x = 0
count = 0
while x <= 100:

    # y母鸡
    y = 0
    while y <= 33:
        
        # z小鸡
        z = 0
        while z <= 100:
            if x+y+z == 100 and x*1 + y*3 + z*0.5 == 100:
                count += 1
                print(x,y,z)
            z+=1
    
        y+=1

    x += 1

print(count)
View Code

二、pass

if 10 == 10:
    print(123)
    
while True:
    pass

三、break 终止当前循环

1、打印1~10 遇到5就终止循环

i = 1
while i <=10 :
    if i == 5:
        break
    print(i)
    i+=1
View Code

例:

# break 终止的是当前循环
i = 1
while i <= 3:
    j = 1
    while j<=3:
        if j == 2:
            break
        print(i,j)
        j+=1
    i+=1
View Code

四、continue 跳过当前循环,从下一次循环开始

1、打印1~10 跳过5

i = 1
while i<=10:

    if i == 5:
        # 需手动自增加1. 当执行continue时,后面的代码不执行,跳到while循环的条件判断处,会造成死循环
        i+=1
        continue
    print(i)

    i+=1
View Code

2、打印1~ 100 所有不含有4的数字

方式一

"""
//可以取到一个数的高位
% 可以取到一个数的低位
46 // 10 = 4
46 % 10 = 6
"""
i = 1
while i<=100:
    if i // 10 == 4 or i % 10 == 4:
        i+=1
        continue
    print(i)
    i+=1
View Code

方式二

i = 1
while i <= 100:
    strvar = str(i)
    if "4" in strvar:
        i+=1
        continue

    print(i)
    i+=1

五、for 循环

# for主要用于遍历数据而提出,while在遍历数据时,有局限性
# for 变量 in 可迭代对象:
#    code1
#    code2
# 可迭代对象(容器类型数据,range对象,迭代器)
# 遍历字符串
container = "today is a good day"
# 遍历列表
container = ["jack","kxq","aaa","bbb"]
# 遍历元组
container = (1,2,3,45)
# 遍历集合
container = {"jack","kxq","xiaoming","aaa","bbb"}
# 遍历字典 (遍历字典时,只遍历键)
container = {"ww":"one","msr":"two","mh":"three"}


for i in container:
    print(i)


# 遍历不等长的二级容器
container = [["jack","kxq","aaa","bbb"],("ooo","ppp")]

for i in container:
    # print(i)
    for j in i:
        print(j)
View Code

 

1、变量的解包

a,b = 1,2
a,b = [3,4]
a,b = {"a":5,"b":6}
print(a,b)

2、遍历等长的二级容器

container = [("a","b","c") , ("aa","bb","cc") , ("aaa","bbb","ccc")  ]
for a,b,c in container:
    print(a,b,c)
# a,b,c = ("a","b","c")
# a,b,c = ("aa","bb","cc")
# a,b,c = ("aaa","bbb","ccc") 

3、range对象

"""
range(开始值,结束值,步长)
结束值本身取不到,取到结束值之前的那个数
"""
# 只有一个值  0~9
for i in range(10):
    print(i)

# 只有两个值
for i in range(3,11):
    print(i)

# 只有三个值
for i in range(1,10,3):
    print(i)  # 1,4,7
#1 (1+3)=>4  (4+3)=>7 (7+3)=>10取不到

# 倒序打印10 ~ 1
for i in range(10,0,-1):
    print(i)
# 10 9 8 7 6 .... 1
View Code

 

总结

"""
while : 较为复杂的逻辑
for   : 数据的遍历
while 和 for 部分代码可以互相转换
"""

六、练习 

'''
1.利用if语句写出猜大小的游戏:
    设定一个理想数字比如:66,
    让用户三次机会猜数字,如果比66大,则显示猜测的结果大了;
    如果比66小,则显示猜测的结果小了;
    只有等于66,显示猜测结果正确,退出循环。
    最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。

2.使用while循环分别打印字符串s="asdfer"中每个元素

3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,    
例如:asb, bsb,csb,...gsb。

4.完成要求:
用户可持续输入(while循环)
    输入A,则显示走大路回家,然后在让用户进一步选择:
        是选择公交车,还是步行?
        选择公交车,显示10分钟到家,并退出整个程序。
        选择步行,显示20分钟到家,并退出整个程序。
    输入B,
        则显示走小路回家,并退出整个程序。
    输入C,
        则显示绕道回家,然后在让用户进一步选择:
        是选择游戏厅玩会,还是网吧?
            选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
            选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
            
4.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和?
            
5.(升级题)打印菱形小星星
'''
     *
    ***
   *****
  *******
 *********
***********
***********
 *********
  *******
   *****
    ***
     *
'''
'''
"""
num = 66
times = 1
while times <= 3:

    num = input("请输入猜测的数字")
    if num.isdecimal():
        num = int(num)
        if num > 66:
            print("猜测的结果大了")
        elif num < 66:
            print("猜测的结果小了")
        else:
            print("猜对了")
            break
    else:
        print("输入有误")
        
    if times == 3:
        print("都没猜对,继续努力")
    
    
    times +=1
"""
    
"""
num = 66
times = 1
sign = True
while sign:

    num = input("请输入猜测的数字")
    if num.isdecimal():
        num = int(num)
        if num > 66:
            print("猜测的结果大了")
        elif num < 66:
            print("猜测的结果小了")
        else:
            print("猜对了")
            break
    else:
        print("输入有误")
        
    if times == 3:
        print("都没猜对,继续努力")
        sign = False
    
    
    times +=1
"""
1
# 2.使用while循环分别打印字符串s="asdfer"中每个元素
s="asdfer"
i = 0
while i < len(s):
    print(s[i])
    i+=1
2
# 3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,    
# 例如:asb, bsb,csb,...gsb。
s = "abcdefg"
for i in s:
    print(i + "sb")
3
"""
4.完成要求:
用户可持续输入(while循环)
    输入A,则显示走大路回家,然后在让用户进一步选择:
        是选择公交车,还是步行?
        选择公交车,显示10分钟到家,并退出整个程序。
        选择步行,显示20分钟到家,并退出整个程序。
    输入B,
        则显示走小路回家,并退出整个程序。
    输入C,
        则显示绕道回家,然后在让用户进一步选择:
        是选择游戏厅玩会,还是网吧?
            选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
            选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
"""
"""
sign = True
while sign:
    choice = input("请输入A,B,C选项")
    if choice.upper() == "A":
        choice2 = input("是选择公交车,还是步行?")
        if choice2 == "公交车":
            print("10分钟到家")
            break
        elif choice2 == "步行":
            print("20分钟到家")
            break
            
            
    elif choice.upper() == "B":
        print("走小路回家")
        break
    elif choice.upper() == "C":
        print("绕道回家")
        choice = input("是选择游戏厅玩会,还是网吧?")
        if choice == "游戏厅":
            print("一个半小时到家,爸爸在家,拿棍等你。")
        elif choice == "网吧":
            print("两个小时到家,妈妈已做好了战斗准备。")
"""
4
i = 1
total = 0
while i < 100:

    if i == 88:
        i+=1
        continue

    if i % 2 == 0:
        total -= i
    else:
        total += i
    i+=1
    
print(total)

total = 0
for i in range(1,100):
    if i == 88 :
        continue
    if i % 2 == 0:
        total -= i
    else:
        total += i
print(total)
4
'''
     *
    ***
   *****
  *******
 *********
***********

***********
 *********
  *******
   *****
    ***
     *
'''

"""
n = 11
13 => 7
11 => 6
9  => 5
...

n  => n // 2 + 1
星星 和 行数之间的关系  hang = n // 2 + 1

1 => 5
2 => 4
3 => 3
4 => 2
5 => 1
6 => 0

当前行i 和 空格之间的关系 kongge = hang - i
空格数 = 总行数 - 当前行

1 -> 1
2 -> 3
3 -> 5
4 -> 7
5 -> 9

当前行i 和 星星之间的关系 xingxing = 2*i - 1

"""
n = 13
hang = n // 2 + 1
i = 1
while i <= hang: # 1 ~ 6
    # 打印空格
    print(" " *(hang - i),end="" )
    
    # 打印星星 
    print("*" * (2*i - 1),end="")
    
    # 打印换行
    print()
    i+=1

i = hang
while i > 0:
    # 打印空格
    print(" " *(hang - i),end="" )
    
    # 打印星星 
    print("*" * (2*i - 1),end="")
    
    # 打印换行
    print()
    i-=1




n = 11
hang = n // 2 + 1
i = 1
while i <= hang: # 1 ~ 6
    # 打印空格
    k = hang - i
    while k>0:
        print(" ",end="")
        k-=1
    
    # 打印星星 
    xingxing = 2*i - 1
    j = 1
    while j <=xingxing:
        print("*",end="")
        j+=1
    
    # 打印换行
    print()
    i+=1

i = hang
while i > 0:
    # 打印空格
    k = hang - i
    while k>0:
        print(" ",end="")
        k-=1
    
    # 打印星星 
    xingxing = 2*i - 1
    j = 1
    while j <=xingxing:
        print("*",end="")
        j+=1
    
    # 打印换行
    print()
    i-=1





print(abs(-1))

# 6 5 4 3 2 1 1 2 3 4 5 6 
# 12
# abs(-6) = 6

"""
# 行数和空格之间的关系
-6 -> 5
-5 -> 4
-4 -> 3
-3 -> 2
-2 -> 1
-1 -> 0
0  -> 跳过

# 行数 和 星星之间的关系
n = 11
-6 -> 1
-5 -> 3
-4 -> 5

13 - abs(i) * 2
13 - 12 = 1
13 - 10 = 3
13 - 8  = 5
"""

# abs用来算绝对值
n = 29
hang = n // 2 + 1

for i in range(-hang,hang+1):
    
    if i == 0:
        continue
        
    # 打印空格
    print(" " * (abs(i)-1) , end="")
    # 打印星星
    print("*" * (n+2 - abs(i) * 2) )
5

 

posted @ 2020-07-10 23:42  kongxiangqun20220317  阅读(371)  评论(0编辑  收藏  举报