Molotus 发表于 2017-9-18 19:36:28

求问大家Python009讲动动手问题,为什么我这样写不对

secreat = 'FishC.com'
count=3
while count:
    tempt = input("请输入密码")
    while"*" in tempt:
      tempt = input('密码中不能含有"*"!您还有',count,'次机会')
    count -= 1
    if tempt == secreat:
      print("密码正确,进入程序.....")
      break
    else :
      print('密码输入错误!您还有',count,'次机会!')
      

      
#在输入正确和除*以外的密码反馈都正确,但是输入*时,就会出错,把*当做乘号处理了。
Traceback (most recent call last):
File "E:/python/009ex01.py", line 6, in <module>
    tempt = input("密码中不能含有"*"!您还有',count,'次机会")
TypeError: can't multiply sequence by non-int of type 'str'

西殴 发表于 2017-9-18 20:05:46

tempt = input('密码中不能含有"*"!您还有',count,'次机会')
改成
tempt = input('密码中不能含有"*"!您还有%d次机会'%count)

Molotus 发表于 2017-9-19 09:27:03

西殴 发表于 2017-9-18 20:05
改成

果然对了,感谢!小甲鱼的参考答案中
print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
是这么写的,能告诉我为什么我那样写会出错吗
   

墨染清殇 发表于 2017-9-19 14:07:19

因为你输入中有*的时候没有跳出while循环,所以他会再次执行  tempt = input('密码中不能含有"*"!您还有',count,'次机会'),并没有执行你后面的count-=1,所以一直是三次不变。

丶丨叚笑 发表于 2017-9-22 11:49:53

password = 'FishC.com'
i = 3
while i:
    passwd = input("请输入密码:")
    if passwd == password:
      print("密码正确,进入程序......")
      break
    elif "*" in passwd:
      print("密码中不能包含有“*”号!,您还有",i,"次机会!",end="")
      continue
    else:
      print('密码输入错误,您还有',i-1,'次机会!',end="")
    i -= 1


换一个调用方式,也可以。先把:"密码中不能包含有“*”号!,您还有",i,"次机会!" 打印出来,再要求输入密码,就不会冲突了。
另外,要满足输入“*”号不减少次数就得加入continue了。密码正确跳出while还需要break。
页: [1]
查看完整版本: 求问大家Python009讲动动手问题,为什么我这样写不对