Python程序设计 多重循环

27 篇文章 6 订阅

教学案例六 多重循环

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()
  • 61
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值