0

蟒蛇 2.7

我正在为 PygLatin Translator 编写代码。这是我的代码:

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 初学者。

4

2 回答 2

1

您的布尔逻辑不正确;if 语句执行如下:

(not original=="") or (original==" " and original.isalpha()==True)

因为or优先级低于and(请参阅记录的优先顺序)。

因为您的字符串不是空的,not original==""is True,并且表达式的第二部分甚至不再计算。

可以通过以下方式简化测试并使其正确:

if original.strip().isalpha():

因为str.isalpha()对于空字符串,never 为 True。在上面的表达式中,从字符串的开头和结尾删除所有空格,如果其中只有空格,则str.strip()留下一个空字符串。

于 2013-10-16T07:29:46.997 回答
0

您正在打印输入语句,您的输入语句是原始的,因此如果您想打印其他内容,请将 if 语句中的原始内容替换为您要打印的内容

于 2017-09-24T19:49:10.670 回答