python - 程序周二不工作,但周日工作
问题描述
我正在使用一本名为“如何像计算机科学家一样思考”的书来学习 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()
所以第一个功能是测试我的程序是否存在错误。问题是前两个测试很清楚,但最后一个测试失败,即使它与前两个具有相同的负值。我想知道使前两个测试通过但后来失败的错误是什么。我是初学者,所以请使用一些简单的语句。
解决方案
你的计算是错误的。以下如何调试小程序将您的代码更改为
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.
推荐阅读
- python - 将多个数据集的 csv 文件组织成 Pandas 数据框列表
- php - PHP插件逻辑不适用
- java - 将 MultiDex 添加到 android studio 中的项目但不断收到 java.lang.NoClassDefFoundError
- c# - 如何在 Entity Framework 6 Database First 中对导航属性实现乐观并发
- html - 带有 SVG 的任务时间线 - 无法为最终过渡设置动画
- machine-learning - 使用交叉验证的多性能指标
- javascript - 如何使 mat-select 第一个选项为空?
- oop - 单一职责原则:一个问题
- git - 使用--allow-unrelated-history 维护历史?
- c - 如何将字符串与字符串数组进行比较?