python - Python中模块化算术计算错误

标签 python csv newline

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

它 *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/

相关文章:

python - 使用垃圾值读取错误的 csv 文件

ruby - 如何根据标题写入/附加到 A CSV?

.net - xmlreader 换行符\n 而不是\r\n

python - 关于 sns.barplot 及其工作原理的问题?

python - Django 。 ."join"查询?

python - 禁用特定文件的缓存/缓冲区 (Linux)

Python 用日期时间替换多个日期列

xml - 在 XPath 中通过 concat() 换行符 (\n)?

javascript - javascript 可以有多少行?

python - 验证后更改 django 中的表单排除值