教学案例六 多重循环
1.n之内的素数
输入n,显示n之内的所有素数 每行显示10个素数 例如,若输入500,结果如图所示
n=eval(input())
#代码开始
c = 0
for i in range(2, n+1):
for j in range(2, i):
if i % j == 0:
break
else:
c += 1
print("{:5d}".format(i), end = "")
if c % 10 == 0:
print()
#代码结束
2.打印乘法表
输入x(小于10的整数),输出x行乘法表 例如:输入9,显示如下图所示
x=eval(input())
#代码开始
for i in range(1,x+1):
for j in range(1,i+1):
print("%d*%d=%2d"%(j,i,i*j),end=" ")
print()
#代码结束
3.百钱买百鸡
设公鸡每只5元,母鸡每只3元,小鸡每元3只,现用x元钱买y只鸡。 编写一个程序,输入x和y,算出各买多少只鸡?(公鸡、母鸡、小鸡必须都有)如果有多个符合条件的结果,则都显示出来。如果没有符合条件的结果,则显示无解。
x=eval(input("钱"))
y=eval(input("鸡"))
#代码开始
c = 0
for i in range(1,x):
for j in range(1,x):
for k in range(3, x, 3):
if 5 * i + 3 * j + k / 3 == x and i + j + k == y:
c += 1
print("公鸡%d只母鸡%d只小鸡%d只" % (i,j,k))
if c == 0:
print("无解")
#代码结束
4.逻辑推理竞赛名次
ABCD四个学生参加一次数学竞赛,赛后他们四人预测名次如下 A说:c第一 ,我第三 B说:我第一,D第四 C说,我第三,D第二 D没有说话 等到最后公布考试成绩时,发现他们每人预测对了一半,编写程序,显示ABCD的名次,各名次之间用空格隔开
#代码开始
for a in range(1,5):
for b in range(1,5):
for c in range(1,5):
for d in range(1,5):
x1 = (c==1 and a==3)
x2 = (b==1 and d==4)
x3 = (c==3 and d==2)
y1 = (c==1 or a==3)
y2 = (b==1 or d==4)
y3 = (c==3 or d==2)
if not x1 and not x2 and not x3 and y1 and y2 and y3:
if a!=b and a!=c and a!=b and b!=c and b!=d and c!=d:
print(a,b,c,d)
#代码结束
5.用户登录密码检验
密码文件如图所示,每行存放逗号分隔的用户名和密码。编写一个小程序,接受输入的用户名和密码,若与文件中的信息相同,则显示密码正确。 若文件中没有输入的用户名,或输入的密码不正确,则显示用户名或密码错误,可再次输入。 若输入错误次数达到三次,则显示密码错误三次,结束程序。
f1=open("sy6//密码.txt","r",encoding="utf-8")
#代码开始
k = 0
flag = 0
while True:
f1.seek(0)
yhm = input("用户名")
mm = input("密码")
if yhm != "":
for i in f1.readlines():
i = i.strip("\n")
i = i.split(",")
if yhm==i[0] and mm==i[1]:
print("密码正确")
flag = 1
break
else:
k += 1
if k >= 3:
print("密码错误三次")
break
else:
print("用户名或密码错误")
if flag==1:
break
#代码结束
f1.close()
6.选择题
实验六 多重循环
1.显示输入数字之内的完全数
显示输入数字之内的完全数。 一个数整等于其所有因子之和(不含这个数本身),则称这个数为完全数。例如 6=1+2+3,所以 6 是完全数。
x=eval(input())
#代码开始
for i in range(1, x):
s = 0
for j in range(1, i):
if i % j == 0:
s = s + j
if s == i:
print(i)
#代码结束
2.输出阶乘等式
输入x 输出从1!到x!等式 例如输入10 输出
x=eval(input())
#代码开始
for i in range(1, x + 1):
s = 1
print("%s!=" % i, end = "")
for j in range(1, i + 1):
s = s * j
print(j,end="")
if i != j:
print("*",end="")
print("=%d"% s)
#代码结束
3.输出符合要求的数字
输入一个数字x(1-9之间),输出所有每个数位上的数字不超过x,各个数位的数字互不相同的三位数,每行显示10个数 注意:每个数后面有空格 提示:可以在print中设置end=" ",在输出表达式后显示空格 例如,输入5,输出如下图
x=eval(input())
#代码开始
count = 0
for i in range(100,1000):
a1 = i % 10 # 个位
a2 = i // 10 % 10 # 十位
a3 = i // 100 # 百位
if a1 <= x and a2 <= x and a3 <= x and a1 != a2 and a1 != a3 and a2 != a3:
count += 1
print(i, end=" ")
if count % 10 == 0:
print()
#代码结束
4.鸡兔同笼问题
鸡和兔子关在一个笼子里,输入头的个数和脚的个数,求笼内关了多少只兔子和多少只鸡? 如果没有符合条件的数目,显示无解
t=eval(input())
j=eval(input())
#代码开始
sum1 = 0
for i in range(1, t):
s = t - i
if 2 * i + 4 * s == j:
sum1 += 1
print("鸡%d只兔子%d只"% (i, s))
if sum1 == 0:
print("无解")
#代码结束
5.剩余最短木料
求剩余最短木料的切割方案。 输入一根材料的长度,需要截成长度为19米和23米的短料。求两种短料各截多少根时,剩余的材料最少?(每种短料必须大于等于一根)
s=eval(input())
#代码开始
a = s // 19
b = s // 23
sy = 5
for i in range(1, b):
for j in range(1, a):
if j * 19 + i * 23 <= s:
sx = s - j * 19 - i * 23
if sx < sy:
n1 = j
n2 = i
zx = sx
#代码结束
print("19米{}段,23米{}段,剩余{}米".format(n1,n2,zx))
6.打印图形
编写一个能计打印图形的小程序。 输入大写字母,打印一个相关图形 例如,输入E 打印图形如下
zm=input("")
#代码开始
n = ord(zm) - ord("A")
for i in range(0, n+1):
for j in range(n-i):
print(" ",end="")
for x in range(0, i+1):
print("%s" % chr(ord("A") + x),end="")
for y in range(1,i+1):
print("%s" % chr(ord("A") + i - y),end="")
print()
#代码结束
7.逻辑推断
一位法官在审理一起盗窃案时,对涉及到的四名嫌疑犯A、B、C、D进行了审问。 四人分别供述如下: A:“罪犯在B、C、D三人之中。” B:“我没有作案,是C偷的。” C:“在A和D中间有一个是罪犯。” D:“B说的是事实” 经过充分的调查,证实四人中只有两人说了真话,并且罪犯只有一个。 请输出真正罪犯的编码 例如,如果A是罪犯,输出A是罪犯。
提示:可以用变量a为0表示a不是罪犯,a为1表示a是罪犯 然后对每个人的两种可能循环。
#代码开始
for a in range(0, 2):
for b in range(0, 2):
for c in range(0, 2):
for d in range(0, 2):
if a + b + c + d == 1: # 只有一个罪犯,相加等于1
if (b==1 or c==1 or d==1)+2*(b==0 and c==1)+(a==1 or d==1)==2:
if a == 1:
print("A是罪犯")
elif b == 1:
print("B是罪犯")
elif c== 1:
print("C是罪犯")
elif d == 1:
print("D是罪犯")
#代码结束
8.多人唐诗作品标题
在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。
编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。 如果该诗人没有作品,显示无作品。 要求能够循环输入诗人姓名进行查找,直到输入空串为止。提示: 查询完一位诗人后需要通过f1.seek(0)将文件指针移到文件的开始处。
f1=open("sy6//唐诗.txt","r",encoding="utf-8")
x=input("诗人姓名")
#代码开始
while True:
count = 0
f1.seek(0)
if x == "":
break
for i in f1.readlines():
i = i.strip("\n")
if i.find(x) != -1:
count += 1
print(i)
if count != 0:
print("一共{}首".format(count))
else:
print("无作品")
x = input("诗人姓名")
#代码结束
f1.close()