Python:验证密码程序与水仙花数、三色球问题

验证密码程序

程序需求:设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

根据需求我们可以得知:
我们需要创建密码变量和次数变量,还有输入数据的变量。

paw = 'zs' #密码
numt = 3 #机会次数
temp = input('输入密码:') #数据输入

用户只有三次机会输入错误。

这里我们就需要对输入数据进行比对判断,正确可以进行下一步(跳出循环),错误则减少numt数值,并继续进行循环直到无法满足条件(机会次数为零)。

while numt: #次数不为零时循环
        if temp == paw: #输入数据与密码进行比对
                print('密码正确,进入系统...') #正确
                break #跳出循环
        else: #否则(不正确)                
                temp=input('密码错误,您还有'+str(numt)+'次机会!请重新输入:')
                numt -= 1 #次数减1           

如果用户输入的内容中包含"*"则不计算在内。

在这里我们就可以用上elif语句和in操作符。

in操作符语法: ‘字符’ in (变量)
用于判断字符是否存在于变量中。
关于if-elif-else语句,具体可以参考我这篇文章:
《Python:if-elif-else语句与三元操作符》

elif '*' in temp:
                temp=input('密码不能包含*号!请重新输入:')

将上面这些组合起来,就是我们最终的程序啦!

paw = 'zs'
numt = 3
temp = input('输入密码:')
while numt:
        if temp == paw:
                print('密码正确,进入系统...')
                break
        elif '*' in temp:
                temp=input('密码不能包含*号!请重新输入:')
        else:                
                temp=input('密码错误,您还有'+str(numt)+'次机会!请重新输入:')
                numt -= 1                
else:
        print('密码错误,请重新进入系统...')

水仙花数问题

问题概述:如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
个人理解: 把一个三位数的个位、十位、百位分离出来,然后把每一位的立方数加起来,如果等于原来的那个三位数,那这个三位数就是水仙花数。

由此我们可以得出:
数值在100到999之间(三位数),我们可以用到for循环和range函数,在这里我们就不得不提到python的两种循环while和for了。

while在循环之前先判断是否满足条件,满足则循环。

while循环语法:while (条件):
--------------------------- (执行语句)……

而for必须有一个可迭代的对象才能进行循环。

for循环语法:for (迭代变量) in 字符串|列表|元组|字典|集合:

range() 函数可创建一个整数列表,一般用在 for 循环中。

range函数语法: range(起始数, 终止数[,步长,默认0])

我们需要一个变量可以迭代,迭代得到的结果会作为下一次迭代的初始值,迭代的范围在100到999之间。

for i in range(100,1000):

然后我们需要把迭代得出的三位数的个位、十位、百位进行分离。我们可以利用Python运算符%取模运算和floor 除法 //把位数分离出来。

关于运算符 /,%和//,具体可以参考我这篇文章:
《Python:判断给定年份是否为闰年。》

 x = i//100
 y = i%100//10
 z = i%10

我们让系统把水仙花数(等于其各位数字立方和的数)给找出来。

if i==x**3+y**3+z**3:
    print(i)

将上面这些组合起来,就是我们最终的程序啦!

for i in range(100,1000):
    x = i//100
    y = i%100//10
    z = i%10
    if i==x**3+y**3+z**3:
        print(i)

除了运用计算符把位数分离出来,还可以使用三个for…in range(,):来分别循环各位的位数,详细的写法可以参考下面这个问题。

三色球问题

问题概述:有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

for red in range(0,4):
    for ye in range(0,4):
        for gr in range(0,7):
            if red + ye + gr == 8:
                print('红:',red,' ','黄:',ye,' ','绿:',gr)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值