Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
158 views
in Technique[技术] by (71.8m points)

python - Why does calling the function work but asserting the function results in an assertion error?

I wrote a function that works fine but when I write an assertion code for it, it gives an assertion error. My only problem with this code is to fix the assertion error.

def frequency(x, y):
    '''Get the frequency (the number of occurrences) of an element in a sequence.
     : param sequence: the sequence in which the element must be counted
     : param element: the element whose frequency we want to obtain
     : return: the frequency of the element in the sequence'''
    a = list(x)
    print(a.count(y))

def test_frequency():
    # Tests
    assert frequency('texts', 'e') == 1
    assert frequency('texts', 'a') == 0
    assert frequency('texts', 's') == 1
    assert frequency('texts', 't') == 2
    # limit tests
    assert frequency('ttt', 't') == 3
    assert frequency('', 'x') == 0

    print('test_frequency: ok')

test_frequency()
frequency(x = input("Enter a word: "), y = input("Enter a letter(symbol): "))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The trivial problem is that the function prints it's values, rather than returning them.

Python has some rather dubious behavior of returning None whenever a function end with no return statement which leads to such unfortunate bugs.

The solution would be to end on return a.count(y) rather than on print(a.count(y)).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...