В чем ошибка в коде? Кажется, это работает нормально в моей IDE, но не работает на онлайн-терминале - PullRequest
2 голосов
/ 04 ноября 2019

Я пытаюсь решить вопрос с leetcode 8 Строка в целое число (atoi) . Но я получаю ошибку во время выполнения.

TypeError: объект 'str' не может быть вызван. Строка 9 в myAtoi (Solution.py)

Я понимаю, что это вызвано вызовом строкового объекта, но не могу понять, чтоисправить.

class Solution:
    def myAtoi(self, str: str) -> int:
        string = str.strip()
        if string[0]=='-' or string[0]=='+' or string[0].isdigit():
            new = string[0]
            for i in range(1,len(string)):
                if string[i].isdigit():
                    new = new+string[i]
                    if i!=len(string)-1 and (string[i+1]==' ' or string(i+1).isalpha()):
                        break
            if(int(new)>=0):
                if((int(new) & 0x7fffffff)==int(new)):
                    return int(new)
                else:
                    return int(0x7fffffff)
            else:
                if((int(new) & -0x80000000)==int(-0x80000000)):
                    return int(new)
                else:
                    return int(-0x80000000)

Может кто-нибудь сказать, пожалуйста, что исправить здесь?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вы ничего не возвращаете в первом if, и у вас есть ошибка при вызове строки, вы используете () вместо [], правильный код будет:

class Solution:
    def myAtoi(self, str: str) -> int:
        string = str.strip()
        if string[0]=='-' or string[0]=='+' or string[0].isdigit():
            new = string[0]
            for i in range(1,len(string)):
                if string[i].isdigit():
                    new = new+string[i]
                    if i!=len(string)-1 and (string[i+1]==' ' or string[i+1].isalpha()):
                        break
            if(int(new)>=0):
                if((int(new) & 0x7fffffff)==int(new)):
                    return int(new)
                else:
                    return int(0x7fffffff)
            else:
                if((int(new) & -0x80000000)==int(-0x80000000)):
                    return int(new)
                else:
                    return int(-0x80000000)
        else:
          return 0

print(Solution().myAtoi("abc"))
print(Solution().myAtoi("ab"))
print(Solution().myAtoi("a"))
print(Solution().myAtoi("abc d e fgh"))
print(Solution().myAtoi("452 abc d e fgh"))
print(Solution().myAtoi("abc d e fgh 452"))
print(Solution().myAtoi("   -42"))
0 голосов
/ 04 ноября 2019

Для тех, кто интересуется окончательным ответом на этот вопрос, это:

class Solution:
    def myAtoi(self, str: str) -> int:
        string = str.strip()
        if not string:
            return 0
        if not string.strip("+-"):
            return 0
        if string[0]=='-' or string[0]=='+' or string[0].isdigit():
            new = string[0]
            for i in range(1,len(string)):
                if string[i].isdigit() or string[i]=='.':
                    new = new+string[i]
                    if i!=len(string)-1 and (string[i+1]==' ' or string[i+1].isalpha()):
                        break
                elif string[i]=='-' or string[i]=='+':
                    break
                elif string[i].isalpha():
                    break
                else:
                    return 0
            new2 = new.strip("+-")
            if new2:
                if(int(float(new))>=0):
                    if((int(float(new)) & 0x7fffffff)==int(float(new))):
                        return int(float(new))
                    else:
                        return int(0x7fffffff)
                else:
                    if((int(float(new)) & -0x80000000)==int(-0x80000000)):
                        return int(float(new))
                    else:
                        return int(-0x80000000)
            else:
                return 0
        else:
            return 0

Это оптимальное решение? Нет! Но это лучшее, что я мог придумать.

Время выполнения: 44 мс, быстрее, чем 47,19% онлайн-представлений Python3 для String to Integer (atoi). Использование памяти: 13,9 МБ, менее 5,95% онлайновых представлений Python3 для строки в целое число (atoi).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...