Python 2.7
我正在为PygLatin翻译编写代码。 这是我的代码:
print"Welcome to the English to Pig Latin translator!"
original=raw_input("Enter a word to translate. Any word.") #Takes an input
if not original=="" or original==" " and original.isalpha()==True: #Checks that 'original' is not an empty text field and also is not a number.
print original #If both conditions are true then prints 'original'
else: #If both conditions don't come out true then prints an error.
print"Either the field is empty or your entry was a number."
如果我输入123作为输入,它仍会打印123,即使它是一个数字。如果输入包含数字,则应该执行else块。我的代码有什么问题?请用简单的词语解释,因为我只是一个Python初学者。
答案 0 :(得分:1)
您的布尔逻辑不正确; if语句执行为:
(not original=="") or (original==" " and original.isalpha()==True)
因为or
的优先级低于and
(请参阅documented precedence order)。
由于您的字符串不为空,not original==""
为True
,表达式的第二部分甚至不再评估。
可以通过以下方式简化测试并使其正确:
if original.strip().isalpha():
因为空字符串str.isalpha()
永远不是True。在上面的表达式中,str.strip()
从字符串的开头和结尾删除所有空格,如果其中只有 空格,则留下一个空字符串。
答案 1 :(得分:0)
您正在打印您的输入声明,您的输入声明是原始的,因此如果您想要打印其他内容,请将if语句中的原始内容替换为您要打印的内容