首页 > 解决方案 > 程序周二不工作,但周日工作

问题描述

我正在使用一本名为“如何像计算机科学家一样思考”的书来学习 Python。他们在那里做了一个练习:

Write  a  function  that  helps  answer  questions  like  “‘Today  is  Wednesday.
I  leave  on holiday in 19 days time. What day will that be?”’
 So the function must take a day name and a delta argument — the number of days
 to add — and should return the resulting day name:
test(day_add("Monday", 4) ==  "Friday")
test(day_add("Tuesday", 0) == "Tuesday")
test(day_add("Tuesday", 14) == "Tuesday")
test(day_add("Sunday", 100) == "Tuesday")
Hint: use the first two functions written above to help you write this one

Can your day_add function already work with negative deltas? For example, -1 would be yesterday, or -7 would be a week ago:
test(day_add("Sunday", -1) == "Saturday")
test(day_add("Sunday", -7) == "Sunday")
test(day_add("Tuesday", -100) == "Sunday")

我写了这个程序

import sys

def test(did_pass):
    '''prints result of test at last'''
    linenum=sys._getframe(1).f_lineno    #gets call line
    if did_pass:
        msg='Test at line {0} PASS'.format(linenum)
    else:
        msg=('Test at line {0} FAIL.'.format(linenum))
    print(msg)


def day_name(x):
    '''converts  day number to day'''
    if x==0:
        return 'Sunday'
    elif x==1:
        return 'Monday'
    elif x==2:
        return 'Tuesday'
    elif x==3:
        return 'Wednesday'
    elif x==4:
        return 'Thursday'
    elif x==5:
        return 'Friday'
    elif x==6:
        return 'Saturday'
    else:
        return

def day_num(y):
    '''converts day to day number'''
    if y=='Sunday':
        return 0
    elif y=='Monday':
        return 1
    elif y=='Tuesday':
        return 2
    elif y=='Wednesday':
        return 3
    elif y=='Thursday':
        return 4
    elif y=='Friday':
        return 5
    elif y=='Saturday':
        return 6
    else:
        return


def day_add(today, stay):
    '''input day name and remaining days to print day name'''
    result=(stay)%7
    answer=(result)+(day_num(today))
    return day_name(answer)


def test_suite():
    test(day_add("Sunday", -1) == "Saturday")
    test(day_add("Sunday", -7) == "Sunday")
    test(day_add("Tuesday", -100) == "Sunday")
test_suite()

所以第一个功能是测试我的程序是否存在错误。问题是前两个测试很清楚,但最后一个测试失败,即使它与前两个具有相同的负值。我想知道使前两个测试通过但后来失败的错误是什么。我是初学者,所以请使用一些简单的语句。

标签: pythonfunctionreturn

解决方案


你的计算是错误的。以下如何调试小程序将您的代码更改为

def day_add(today, stay):
    '''input day name and remaining days to print day name'''
    result = stay % 7
    answer = result + day_num(today)
    print(result, day_num(today), day_name(answer)) # DEBUG your code
    return day_name(answer)

输出:

6 0 Saturday
Test at line 34 PASS

0 0 Sunday
Test at line 35 PASS

5 2 None                        # analyze this and fix it.
Test at line 36 FAIL.

推荐阅读