2017-10-19 207 views
1
while True: 
    password=input("Enter a password. Make sure it:\nContains at least 1 capital letter\nContains at least 6 letters\n") 
    time.sleep(0.35) 
    if len(password)>5 and password.islower=="False": 
     break 

你如何让这个站。如果它有一个大写字母并且长度超过6个字符,我希望它停止。为什么这个循环不停止?

+1

'password.islower ==” False“' - >'not password.islower()' – Dabiuteef

+1

'islower'是一个返回True/False值的方法。你需要做'password.islower()是假' – Wondercricket

+1

甚至'不password.islower()' – Duncan

回答

-1

因为islower不是财产,而是它是一个功能。试试这个:

not password.islower() 

此外,由@丹提到的,你用"False"比较islower()功能(一个布尔值)的结果。在Python中,可以直接使用布尔结果,如上所示,而不将其与字符串"False"(这是错误的)或布尔型False(这是奇怪和危险的)进行比较。 islower()==FalseTrue如果密码包含大写字符。

+0

'“False”!= False'(这仍然不能解决OP的所有问题) – Dan

+0

@丹哦,我停止了“编译”OP代码,第一次出错:) –

1
if len(password)>5 and not password.islower(): 

if len(password)>5 and password.islower() == False: 

会工作。

+0

不,不会。 'islower'是一个函数。 – Dan

+0

添加括号来容纳islower是一个函数。 – mrCarnivore

+0

括号!=括号:P(但代码正确; DV删除) – Dan

5

这里:

password.islower=="False" 

首先,你不调用方法 - 你需要添加括号 - 这样你比较的方法用一个字符串。它永远不会是真的......

然后,一旦你解决这个问题:

password.islower() == "False" 

你结束了一个布尔值与字符串比较。它永远不会是真的要么,你想用布尔False(不含引号)来比较:

password.islower() == False 

作为最后一个音符,这通常就是:

not passsword.islower() 
+0

不知道为什么这是DV'd,它只是答案是正确的,并且解决了所有OP的问题(至少显示了那些问题)。 – Dan

+0

@丹,解决了所有的问题,除了他说'长于6',然后测试'> 5'。 – Duncan

+0

@邓肯它并没有这么说。它说“至少6”,在这种情况下,“> 5”就足够了。 – Dan