python中嵌套循环练习题
1.打印九九乘法表:
方法一:
for i in range(1,10):
for j in range(1,10):
print(f’{i}{j}={i * j}’, end=’\t’)
print()
方法二:
for i in range(1, 10):
for j in range(1, i+1):
print(str(j)+‘x’+str(i)+’=’+str(ij)+’\t’, end=’’) # ‘\t’:间隔为tab键的长度 end=’’,表示不换行
print() # 换行
运行结果如下:
2.在1-100之间,缝“7”拍腿游戏:(计算着这个范围内出现了几次7)
方法一:
count = 0
for i in range(1, 101):
j = str(i)
if ‘7’ in j:
count += 1 # 统计遇到了几次7
continue # 当遇到7就跳过进行下一次循环
print(count)
方法二:
total = 99
for i in range(1,100):
if i%10 == 7:
continue
else:
string = str(i)
if string.startswith(‘7’): # 判断是否以7开头
continue
total -= 1
print(total)
3.利用嵌套循环打印图形:
打印一个等腰三角形:
rows = int(input(‘请输入一个正整数:’))
for a in range(0, rows): # 循环层数
for i in range(0, rows-a): # 空格数
print(’ ‘, end=’’) # 循环输出空格
for j in range(0, 2a+1): # 循环输出星星
print(’’, end=’’)
print(’’)
运行结果:
4.打印一个菱形,将上面三角形倒过来打印,再合并在一起:
打印上部分
line = 5 # 定义层数为5层
for i in range(1, line+1): # 遍历层数
for j in range(0, line-i): # 遍历空格
print(’ ‘, end=’’) # 打印空格
for a in range(0, 2i-1): # 遍历星星数
print(’’, end=’’) # 打印出**
print(’’) # 换行
打印下半部分:
row = 7 # 定义一个变量用来控制星星的个数
for i in range(1, line): # 遍历层数
for j in range(0, i): # 遍历空格
print(’ ‘, end=’’) # 打印空格
for a in range(0, row): # 遍历星星数
print(’*’, end=’’) # 打印出**
row = row-2
print(’’)
方法二:
for a in range(1, 10):
if a == 1 or a == 9:
print(" "4+""1)
elif a == 2 or a == 8:
print(" "3+""3)
elif a == 3 or a == 7:
print(" "2+""5)
elif a == 4 or a == 6:
print(" "1+""7)
else:
print(""9)
运行结果:
5.打印1-1000之间的水仙花数,例如13+53+3**3=153
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
运行结果:
6. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
方法一:
height = 100
long = height/2 # 每次弹起的高度
for i in range(2, 11): # 第二次开始,落地时的距离应该是反弹高度的2倍
height += 2long # 每次弹起又落下的总路程为:每次弹起的高度2再全部相加
long /= 2 # 每次弹起高度除以2,循环到最后为第10次
print(‘总高度’, height)
print(‘第10次反弹高度:’, long)
方法二:
a = 100
s = 0
for i in range(10):
s += a
a /= 2
if i == 9:
break
s += a
print(“第10次反弹”, a)
print(“第10次落地时,共经过”, s)
运行结果:
7.有1 2 3 4 这四个数字,设计程序计算能组成多少个互不相同且无重复数字的3位数?分别是什么?
for i in range(5):
for j in range(5):
for n in range(5):
if i!=j and i!=n and j!=n:
print(i100+j10+n)
8.循环录入学生的成绩并求出平均分,当录入负数时提示录入错误, 当输入over时提示结束,最后输出总成绩,平均分以及录入了多少个成绩?
avg = 0
count = 0
n = 0
while True:
course = input(‘请输入学生的成绩:’) # 此处先不定义数字类型
if course == ‘over’:
break
print(‘录入结束!’)
if int(course) < 0:
print(‘录入错误,请重新输入:’)
continue
count += int(course)
n += 1
avg = count/n
print(‘学生平均成绩是:’, avg)
方式二:
zh=0
cs=0
while True:
grade = input(‘请输入学生成绩:’)
if grade==‘over’:
print(‘录入结束!’)
break
elif float(grade)<0:
print(‘录入错误’)
elif float(grade)>0:
zh+=float(grade)
cs=cs+1
print(“总成绩为:”,zh,“平均成绩为:”,round(zh/cs),“总共录入”,cs,“个学生成绩”)
运行结果:
9.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
方法一:
for i in range(1, 1000):
for j in range(1, 1000):
for k in range(1, 1000):
if i + 100 == jj and i +268 == kk:
print(j, k)
print(i)
方法二:
for i in range(1, 1000):
for j in range(1, 1000):
if jj == i+100:
for k in range(1, 1000):
if(j+k)(j+k) == i+168:
print(j, k)
print(i)
break
10,冒泡排序:是一个很典型的嵌套循环。对列表中的数据,两两比较,将较小的数放在较大数的前面。比如对于列表a = [11, 5, 7, 3, 9]进行冒泡排序:主要关注排序几趟i,每趟几次j,比较相邻数据,调换位置
第一趟:a = [5, 11, 7, 3, 9]
a = [5, 7, 11, 3, 9]
a = [5, 7, 3, 11, 9]
a = [5, 7, 3, 9, 11]
比较了4次
第二趟: a = [5, 7, 3, 9, 11]
a = [5, 3, 7, 9, 11]
a = [5, 3, 7, 9, 11]
比较了3次
第三趟: a = [3, 5, 7, 9, 11]
a = [3, 5, 7, 9, 11]
比较了2次
第四趟: a = [3, 5, 7, 9, 11]
比较了1次
代码如下:
for i in range(len(a)-1):
for j in range(len(a)-i-1):
if a[j] > a[j+1]: # 将大于改成小于,列表将会变成降序。
a[j], a[j+1] = a[j+1], a[j] # 调换位置
print(a)