【问题标题】:Why my python code think i was trying to concatenate <int> to <str> while actually i wasn't?为什么我的 python 代码认为我试图将 <int> 连接到 <str> 而实际上我不是?
【发布时间】:2020-10-29 03:53:58
【问题描述】:

我试图创建一个函数 timeConversion,它以 12 小时时间格式作为输入并返回 24 小时时间格式。输入是一个包含 12 小时格式时间的字符串,即hh:mm:ssAMhh:mm:ssPMhhmmss分别代表小时、分钟和秒。

完整代码:

def timeConversion(s):
     s = list(s)
     if s[-2:] == 'AM':  
        if s[:2] == ['1', '2']:
            s[0] = 0
            s[1] = 0
     else  :
        if s[:2] != ['1', '2']:
            s[0] = (int(s[0])*10 + int(s[1]) + 12) // 10
            s[1] = (int(s[0]+s[1]) + 12) % 10
        
      del s[-2:]
      s = ''.join(s)
      return s

x = timeConversion("07:05:45PM")
x

在第 10 行

s[1] = (int(s[0]+s[1]) + 12) % 10

我收到以下错误消息:

TypeError: +: 'int' 和 'str' 的操作数类型不受支持

我尝试过使用

type(int(s[0]+s[1]))

它返回 int 类型,那么我错过了什么?

【问题讨论】:

  • s 包含什么?
  • 猜你想要(int(s[0])+int(s[1]) + 12) % 10
  • “我尝试使用 ... 并且它返回 int 类型” - 尝试将其放在错误位置之前,您会发现这也会引发 TypeError。您的类型在整个程序中并不一致。
  • 到第 10 行时,s[0] 是一个整数,s[1] 是一个字符串。所以s[0]+s[1] 给了你的TypeError

标签: python arrays string concatenation typeerror


【解决方案1】:

阅读解决方案和 cmets 后,我注意到了我的错误。请允许我为这些问题提供我自己的解决方案。这个解决方案需要我引入一个额外的变量(我之前尽量避免,但失败得很惨)。

def timeConversion(s):
    s = list(s)
    if s[-2:] == ['A','M']:  
        if s[:2] == ['1', '2']:
            s[0] = 0
            s[1] = 0
    else  :
        if s[:2] != ['1', '2']:
            #introducing variable k
            k = int(s[0]+s[1]) + 12
            s[0] = str(k // 10)
            s[1] = str(k % 10)
        
    del s[-2:]
    s = ''.join(s)
    return s

x = timeConversion("07:05:45PM")
x

上面的代码输出:

19:05:45

【讨论】:

    【解决方案2】:

    排队

    s[1] = (int(s[0]+s[1]) + 12) % 10

    您转换了 int(s[0]+s[1]) 。如果 s[0] = '1' 和 s[1] = '2' ,那么它将给出 12 。 但是你需要 3 。 所以将第 10 行替换为以下行..

    s[1] = (int(s[0])+int(s[1]) + 12) % 10
    

    【讨论】:

      【解决方案3】:

      也许您的列表 s 包含字符串,因此

      s[0]+s[1]
      

      导致问题。试试

      int(s[0]) + int(s[1])
      

      我明白你的问题了。

      int(c[0]+c[1])
      

      不等于

      int(s[0]) + int(s[1])
      

      【讨论】:

        【解决方案4】:

        在这两行中,

        s[0] = (int(s[0])*10 + int(s[1]) + 12) // 10
        s[1] = (int(s[0]+s[1]) + 12) % 10
        

        结果是导致问题的int

        def timeConversion(s):
            s = list(s)
            if s[-2:] == 'AM':  
                if s[:2] == ['1', '2']:
                    s[0] = 0
                    s[1] = 0
            else:
                if s[:2] != ['1', '2']:
                    # change the evaluated result to str
                    s[0] = str((int(s[0])*10 + int(s[1]) + 12) // 10)
                    s[1] = str((int(s[0]+s[1]) + 12) % 10)
                
            del s[-2:]
            s = ''.join(s)
            return s
        
        >>> x = timeConversion("07:05:45PM")
        >>> x
        '19:05:45'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-17
          • 1970-01-01
          • 1970-01-01
          • 2021-04-11
          • 2017-04-29
          相关资源
          最近更新 更多