我有以下代码,其中一个特定的条目组合存在神秘错误:
它 *appears"对除输入“Friday”和“1000”以外的所有其他内容都可以正常工作,它会抛出一个变量错误。
完整代码 list : https://repl.it/Jd6a/0
代码
#Use of Modulo Arithmetic
def main():
DAY="Monday"
print("Here's a little modulo magic for ya...")
dayofweek=input("Enter day of week (e.g. Monday, Tuesday, Wednesday, etc:")
numberofdays=input("Enter number of days from that day of the week you would like to calculate:")
if dayofweek=="Monday":
dow=1
elif dayofweek=="Tuesday":
dow=2
elif dayofweek=="Wednesday":
dow=3
elif dayofweek=="Thursday":
dow=4
elif dayofweek=="Friday":
dow=5
elif dayofweek=="Saturday":
dow=6
elif dayofweek=="Sunday":
dow=7
modanswer=int(numberofdays)%7
answer=modanswer+dow
if answer==1:
finalanswer="Monday"
elif answer==2:
finalanswer="Tuesday"
elif answer==3:
finalanswer="Wednesday"
elif answer==4:
finalanswer="Thursday"
elif answer==5:
finalanswer="Friday"
elif answer==6:
finalanswer="Saturday"
elif answer==7:
finalanswer="Sunday"
print(numberofdays,"days from -",dayofweek,"-will be-",finalanswer)
main()
测试(正确)和错误如下所示
Here's a little modulo magic for ya...
Enter day of week (e.g. Monday, Tuesday, Wednesday, etc: Monday
Enter number of days from that day of the week you would like to calculate: 1000000
1000000 days from - Monday -will be- Tuesday
main()
Here's a little modulo magic for ya...
Enter day of week (e.g. Monday, Tuesday, Wednesday, etc: Friday
Enter number of days from that day of the week you would like to calculate: 1000
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 42, in main
UnboundLocalError: local variable 'finalanswer' referenced before assignment
我在找什么:
我会对 a) 对问题进行解释的解决方案感兴趣 b) 更优雅的方法,通过验证来解决问题(也许使用更简单的构造)
最佳答案
modanswer=int(numberofdays)%7
answer=modanswer+dow
modanwer
在0到6(含)之间,dow
在1到7(含)之间,所以answer
在0到13(含)。您应该在添加后应用模运算。这可能有效:
answer = (int(numberofdays) + dow - 1) % 7 +1
-1
和 +1
是必需的,因为您的answer
介于 1 和 7 之间,但取模返回 0 和 6 之间的数字。
您可以简单地使用一个列表、0 索引 day_number
和模数:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
day_number = days.index('Friday') # 4
offset = 1000
print(days[(day_number + offset) % 7])
# Thursday
关于python - Python中模块化算术计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254111/