Python - 检测原始输入是否为空

6

我可能有一个非常愚蠢的问题...

如何判断raw_input是否从未输入任何内容?(空值)

final = raw_input("We will only cube numbers that are divisible by 3?")
if len(final)==0:
    print "You need to type something in..."
else:
    def cube(n):
        return n**3
    def by_three(n):
        if n%3==0:
            return cube(n)
        else:
            return "Sorry Bro. Please enter a number divisible by 3"
    print by_three(int(final))

特别是第2行...如何测试最终是否没有输入?如果输入了任何内容,代码就能正常工作,但如果没有提供任何输入,则会出错....我知道这很简单,但仍需要帮助。

你的代码会出现什么问题呢?测试 len(final)== 0 有点啰嗦,但应该可以正常工作。 - Martijn Pieters
“breaks”是什么意思? - arshajii
我建议使用 final = final.strip() 来去除任何空格。 - johnsyweb
我收到的错误与我在结尾处的int()转换有关。 - Nicholas Hazel
@NicholasHazel:实际上,在至少从1.5到3.4的每个Python版本中,False == 0都是真的。然而,并不是每个falsey值都可以使f == 0成立。例如,'' == 0是假的,即使''0都是falsey。 - abarnert
所以你的意思是False = 0 = null = "",它们在很大程度上可以互换,因为它们都没有值? - Nicholas Hazel
1个回答

6
没有输入结果会得到一个空字符串;空字符串(像空容器和数字零一样)测试为布尔值false;只需测试not final即可:
if not final:
    print "You need to type something in..."

您可能希望去掉字符串中的所有空格,以避免在输入空格或制表符时出现错误:
if not final.strip():
    print "You need to type something in..."

然而,您仍需要验证用户输入的整数是否有效。您可以捕获 ValueError 异常:

final = raw_input("We will only cube numbers that are divisible by 3?")
try:
    final = int(final)
except ValueError:
    print "You need to type in a valid integer number!"
else:
    # code to execute when `final` was correctly interpreted as an integer.

2
@arshajii:它应该可以正常工作;其他地方出了问题,代码按照广告所述运行。 - Martijn Pieters
我已经在if语句中添加了你的“not final”,一切工作正常。难道我使用的编译器比3.3版本的Python还要旧吗? - Nicholas Hazel
我应该在最后一步中删除转换为int的操作吗...? - Nicholas Hazel
@NicholasHazel:请注意,在Python 3中,您应该使用input()而不是raw_input()。是的,在这种情况下,您将从by_three()函数调用行中删除int()调用。 - Martijn Pieters
了不起的洞察力。我只用Python玩了一天(显然)。我看到了它有多么强大,但我习惯于PHP和JS语法。虽然它很简单,但学习它还是有点棘手 :-) 感谢您的帮助! - Nicholas Hazel
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接