2017-07-22 18 views
1
模数计算

我有下面的代码,其中有条目的一个特定组合,一个神秘的错误:错误在Python

它*出现“为一切而对于投入正常工作:”星期五“和 ”1000“,它抛出一个变量错误

全部代码: 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 

我在找什么:

我很想在一个)与解释问题的解决b)通过验证来解决问题的更优雅方式(使用更简单的构造)

回答

4
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 
+1

谢谢!添加后应用模运算会导致错误:answer = modanswer + dow modanswer = int(numberofdays)%7 error UnboundLocalError:分配前引用的本地变量'modanswer' – MissComputing

+1

@MissComputing请参阅更新。你不能使用Python中一行定义的变量。 –

+0

会看。这不是简单的工作:modanswer = 0 answer = modanswer + dow modanswer = int(numberofdays)%7 打印(回答)..它似乎! (如以下由Compoot所建议) – MissComputing