北理工Python程序设计MOOC练习笔记(2)

第四周题目练习笔记

一、三位水仙花数

"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬请按照从小到大的顺序输出所有的3位水仙花数,用"逗号"分隔输出结果。
‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

#错误的代码
for i in range(100,1000):
    a=str(i)
    re=0
    for j in range(3):
        re+=pow(eval(a[j]),3)
    if i==re:
        print(i,end=",")

刚写完时,乍一看没有问题,但是输出结果在末尾多了一个逗号。

#错误的输出
153,370,371,407,

一开始尝试在for循环结束后加一个转义字符’\b’,即退格符,来删掉最后一个逗号。

#感觉良好的代码
for i in range(100,1000):
    a=str(i)
    re=0
    for j in range(3):
        re+=pow(eval(a[j]),3)
    if i==re:
        print(i,end=",")
print("\b")  

但是输出后,末位的逗号还是没有删掉。在鱼C论坛上有人说一些转义字符如’\b’和’\r’等在IDE中不适用,只适用于cmd控制台,所以这里用不了…
之前末尾会有一个逗号是因为print时逗号和水仙花数是一起打印的,所以想到将两者分开打印。
逆向思维,把逗号输出在水仙花数之前。再设一个flag变量,设其初始值为0,找到第一个水仙花数时不打印逗号。

#%%打印水仙花数,末位没有逗号
flag = 0
for i in range(100, 1000, 1):
    a=str(i)
    re=0
    for j in range(3):
        re+=pow(eval(a[j]),3)
    if re == i:
        if flag == 1:
            print(",", end="")
        print(i, end="")
        if flag == 0:
            flag =1
            

二、用户的三次登录机会

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
描述

给用户三次输入用户名和密码的机会,要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”

#回想起第四周课件里讲过else和for循环、while循环的联用。
#当循环未因为break结束时,执行else后面的语句,故通过else来编写程序使其更简洁。
i=0
while i<3:
    name=input('');code=input('')
    if name=='Kate'and code=='666666':
        print("登录成功!")
        break
    else:
        i+=1
else:
    print('3次用户名或者密码均有误!退出程序。')

你可能感兴趣的:(北理工Python程序设计MOOC练习笔记(2))