打印语句在Python,而不是重复两次一次
我已经创建了一个生成安全的密码短语python程序,我将它使用户可以决定是否要打印其密码的文本文件的raw_input
功能。我也做了这样的事情,如果用户决定输入程序无法识别的输入,程序就会重复。尽管如此,我一直在困扰这个问题。下面是代码,下面是我对问题的解释。打印语句在Python,而不是重复两次一次
if writeyn == 'Y' or writeyn == 'y' or writeyn == 'yes' or writeyn == 'Yes':
print('Written to passwords.txt')
f = open("passwords.txt", "a+") # "append"
f.write(passtype + " - " + mypw)
if writeyn == 'n' or writeyn == 'N' or writeyn == 'no' or writeyn == 'No':
print('Writting Stopped.')
while writeyn != 'n' or writeyn != 'N' or writeyn != 'no' or writeyn != 'No' or writeyn != 'Y' or writeyn != 'y' or writeyn != 'yes' or writeyn != 'Yes':
writeyn = raw_input("Invalid Input; " + "\nWould you like to write your password to a text file? Y or n")
writeyn = writeyn.strip()
if writeyn == 'n' or writeyn == 'N' or writeyn == 'no' or writeyn == 'No':
print 'Writing Stopped.'
break
elif writeyn == 'Y' or writeyn == 'y' or writeyn == 'yes' or writeyn == 'Yes':
print('Written to passwords.txt')
f = open("passwords.txt", "a+")
f.write(passtype + " - " + mypw)
break
当我在终端内运行程序时,我得到下面的链接中显示的以下输出。
取而代之的是print 'Writing Stopped.
打印一次当用户指定,他们将不喜欢的密码写在文件password.txt的它,而不是重复两次。这也适用于print('Written to passwords.txt')
。 我看空白,看看如果是这样的问题,但现在看来似乎并非如此。有谁知道是什么原因导致程序执行此操作?
的问题是你如何在
while writeyn != 'n' or writeyn != 'N' or writeyn != 'no' or writeyn != 'No' or writeyn != 'Y' or writeyn != 'y' or writeyn != 'yes' or writeyn != 'Yes':
连接逻辑比较根据您输入“N”的截图。所以比较
writeyn != 'n'
是假的,但
writeyn != 'N'
为True。既然你用OR来连接它们,最后的结果是真的,你输入while循环(导致对话框重新出现)。
要解决它,我会用
while not (writeyn == 'n' or writeyn == 'N' or writeyn == 'no' or writeyn == 'No' or writeyn == 'Y' or writeyn == 'y' or writeyn == 'yes' or writeyn == 'Yes'):
@TheoretiCAL是的,但他的代码剪辑是不完整的imo。该屏幕截图显示了正在打印的其他行(如包含StackOverflow的行)。该源代码未显示。第一次“你想写你的密码到一个文本文件”打印不是上述代码剪切的一部分。但基于他的问题,我认为他很清楚自己在做什么。他希望用户输入有效的答案,如果答案无效,他想输入while循环。 – ftiaronsem
由于'n'=='n',比较writeyn!='n'为False。因为'N'!='n',所以比较writeyn!='N'为真。 – ftiaronsem
至于字符串类型。的raw_input的documtation表示:的raw_input([提示]) 如果提示参数存在时,它被写入到标准输出没有尾随换行符。然后该函数从输入中读取一行,将其转换为一个字符串(剥离尾随的换行符),然后返回该行。 – ftiaronsem
对不起,我应该已经更加明确建议。我现在编辑它。 – subliminal
除了其他方面的建议,我发现在使用'writeyn.lower()“N”,“不”,“Y”,“是”]'是一个更容易比条件语句的字符串读取。字符串lower()将把它放到小写字母中,这样你的一半情况就消失了。如果x包含在数组中,则[x,y,z]模式中的x返回true。 – Amoliski