区分字符串中的单词和数字 - 断言错误

时间:2014-03-20 16:36:50

标签: python

def checkio(words):
    word = words.isalpha()
    num = words.isdigit()
    if word:
        pass
    if num:
        pass
    return True or False


print checkio(u"Hello World hello") == True, "Hello"
print checkio(u"He is 123 man") == False, "123 man"
print checkio(u"1 2 3 4") == False, "Digits"
print checkio(u"bla bla bla bla") == True, "Bla Bla"
print checkio(u"Hi") == False, "Hi"

工作正常。但是 -

  1. 当我用assert替换print时,它会给出Assertion Error。我怎么认为呢?
  2. 这是一个需要使用.split()来解决它的难题。我无法弄清楚如何使用它,因为当我将它转换为list .isdigit并且isalpha不会工作。需要帮助。
  3. 谢谢!

    注意 - 这就是拼图页面所说的内容 -

    "前提条件:输入包含单词和/或数字。没有混合的单词(字母和数字组合)。 0< |字| < 100(这是一项简单的任务)。"我不遵循这一行。

2 个答案:

答案 0 :(得分:2)

要解决目前为止的一个功能:

def checkio(words):
    word = words.isalpha() # word = either True or False
    num = words.isdigit()  # num = either True or False
    if word: # these four
        pass # lines don't
    if num:  # actually
        pass # do anything
    return True or False # always evaluates to return True

您实际上使用在函数开头创建的变量wordnum(除了明确或隐式地确定是否pass) ,这应该让你知道你的功能可能没有做太多!

一些片段可以帮助您:

words = words.split() # get list of individual words

len(words) # how many words

for word in words: # iterate through the words

您可以记录您连续看到的字母字数,以及return True,如果它变为三个字。

答案 1 :(得分:0)

使用.split()

正如您已经意识到的那样,.split()将字符串转换为字符串列表。默认情况下,它会将字符串分隔为以空格分隔的部分。

>>> "Hello World hello".split()
['Hello', 'World', 'hello']

显然,.isalpha().isdigit()是字符串的方法,而不是列表。因此,您必须遍历列表中的字符串,并检查每个字符串是否为单词或数字。

>>> for word in "Hello World hello".split():
        if word.isalpha(): print "word!"
        elif word.isdigit(): print "digit!"


word!
word!
word!

现在您知道如何检查每个单词,由您决定如何确定该字符串是否连续包含三个单词。

您的AssertionError s

现在,您AssertionError的原因就是return True or False返回的原因。看:

>>> True or False
True

这意味着您总是返回True。不幸的是,这是simple boolean arithmetic所以你需要阅读它。我想你试图说“这个函数要么返回True,要么返回False”,但这根本不是你所表达的。无论如何,如果您将此print语句替换为assert

print checkio(u"He is 123 man") == False
# goes to
assert checkio(u"He is 123 man") == False

您说assert True == False,因此错误。如果您可以连续找到三个单词,请尝试返回True,否则False