【问题标题】:Using modulus operator in a python conditional statement在 python 条件语句中使用模运算符
【发布时间】:2014-02-18 04:33:33
【问题描述】:

当我运行代码时,它给了我一个错误:字符串格式化期间并非所有参数都被转换

year = raw_input( "Please enter a year" )

if year % 4 == 0 && year % 100 != 0:
    print ( "{0} is a leap year", year )
elif year % 4 == 0 && year % 100 == 0 && year % 400 == 0:
    print ( "{0} is a leap year", year )
else:
    print ( "{0} is not a leap year", year )

【问题讨论】:

    标签: python modulus


    【解决方案1】:

    因为raw_input返回一个字符串,所以行

    year % 4 
    

    正在尝试执行 string format 操作,该操作与模数共享同一运算符 %

    您需要将输入转换为整数,使用int()

    另外,正如 thefourtheye 所提到的,boolean AND operatorand,而不是像 C 使用的 &&

    所以:

    while True:
        # Prompt the user until they give a valid integer.
        year = raw_input( "Please enter a year" )
        try:
            year = int(year)
            break
        except ValueError:
            pass
    
    if (year % 4 == 0) and (year % 100 != 0):
        print "{0} is a leap year".format(year)
    elif (year % 4 == 0) and (year % 100 == 0) and (year % 400 == 0):
        print "{0} is a leap year".format(year)
    else:
        print "{0} is not a leap year".format(year)
    

    注意正确的字符串格式,也使用format()

    【讨论】:

    • @thefourtheye 我认为您不需要这样做,但是可以。在那里留下你的参考。
    【解决方案2】:
    1. raw_input 的结果总是一个字符串,你需要将它们显式转换为你想要的类型

      year = int(raw_input( "Please enter a year" ))
      
    2. 在 Python 中,条件和运算符表示为 and 而不是 &&

      if year % 4 == 0 and year % 100 != 0:
      ...
      elif year % 4 == 0 and year % 100 == 0 and year % 400 == 0:
      ...
      
    3. 而且,当你使用{0} 时,你应该使用.format,像这样

      print ( "{0} is a leap year".format(year) )
      ...
      print ( "{0} is a leap year".format(year) )
      ...
      print ( "{0} is not a leap year".format(year) )
      

    【讨论】:

    • 这是真的,但与 OP 得到的错误无关。
    • 错误发生在year % 4,因为year 是一个字符串,而不是一个整数。
    • @JonathonReinhart 我设法提供了所有可能的修复。您认为其中任何一个仍然是错误的吗?
    • 不,我相信你现在已经修好了。
    • @JonathonReinhart 谢谢 :)
    【解决方案3】:

    改变

    year = raw_input( "Please enter a year" )
    

    到:

    year = int(raw_input( "Please enter a year" ))
    

    并将每个&& 替换为and

    year = int(raw_input( "Please enter a year" ))
    
    if year % 4 == 0 and year % 100 != 0:
        print ( "{0} is a leap year", year )
    elif year % 4 == 0 and year % 100 == 0 and year % 400 == 0:
        print ( "{0} is a leap year", year )
    else:
        print ( "{0} is not a leap year", year )
    

    【讨论】:

      【解决方案4】:

      raw_input 的输出将是一个字符串;当您使用% 运算符并且第一个操作数是字符串时,它执行string formatting,而不是模数。 (和year % 4一样,year是一个字符串,因为它是raw_input的输出)。

      简而言之,您希望year 是一个数字。你需要这样的东西:

      year = int(year)
      

      【讨论】:

      • strip 不需要,int 将忽略字符串两端的空格。
      猜你喜欢
      • 2017-02-22
      • 2016-12-17
      • 2012-03-26
      • 2012-04-19
      • 1970-01-01
      • 2013-07-28
      • 2011-02-18
      • 2023-04-05
      • 2019-12-23
      相关资源
      最近更新 更多