1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
1

'str' object is not callable Почему?

31.01.2020, 18:08. Показов 6053. Ответов 21

Я конечно туплю но не думал что на столько
Пишу типа Адресную книгу
При выборе действия Посмотреть мои контакты вылезает ошибка 'str' object is not callable,но контакты показываются,но и программа вылетает\завершается..
Вот код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
import sys
import time
print("---АДРЕСНАЯ КНИГА---")
 
def base():
    def add():
        which2 = input("Введите имя и фамилию контакта: ")
    def change():
        whatd = input("Введите действите что бы выбрать его: \nПосмотреть мои контакты\nДобавить контакт\nВвод: ")
        if whatd == "Посмотреть мои контакты":
            which = input("Нажмите Enter для входа в меню добавления или (Введите Контакты для просмотра контактов) : ")
            if which == "Контакты":
                print(contacts)
                return change()
            if which == "":
                return add()
            else:
                print("Завершение программы...")
                time.sleep(2)
                sys.exit
 
    def what():
        whatdo = input("Введите действие: \nПосмотреть мои контакты\nИзменить мои контакты\nВвод: ")
        if whatdo == "Посмотреть мои контакты":
            print("Ваши контакты:\n")
            print(contacts)
            return whatdo()
        if whatdo == "Изменить мои контакты":
            return change()
            
    contacts = {'Вадя Мусоров' : 'Телефон: 8800613461',
    'Жопа Генадьевна': 'Телефон: 7980307025',
    'Ибрагим Консервович': 'Телефон: 87297919645'}
    go = input("Введите Click что бы войти в контакты, или любое слово что-бы выйти из программы: ")
    if go == "Click":
        return what()
    else:
        print("Завершение программы...")
        time.sleep(2)
        sys.exit
 
 
            
        
 
 
 
base()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2020, 18:08
Ответы с готовыми решениями:

TypeError: 'str' object is not callable. Как исправить?
import string file = open("input.txt", "r") db = file.readlines() file.close() file =...

TypeError: 'str' object is not callable. Как исправить? - Python
import time, socket, threading, requests, urllib, socks def thread(numthreads, attack): ...

Как исправить ошибку TypeError: 'str' object is not callable?
Как исправить ошибку типа объекта. try: WebDriverWait(chrome, 60).until( ...

Почему возникает ошибка object is not callable?
Отрывок кода def opr(self): path = File_location + "1_classes/" +...

21
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
31.01.2020, 18:24 2
DebikPython,
Зачем писать такую дичь с вложенными функциями (к тому же неверно вложенными), если ты не понимаешь что такое замыкания и рекурсия?
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 19:00  [ТС] 3
Я учусь,и пишу так как знаю)
Если ты в футбол играешь и пнешь левой ногой а тренер скажет нужно правой,ты дурак.Что ты ему ответишь?)

Добавлено через 4 минуты
Чаще замечаю что многие любят обосрать новичков а не сказать как правильнее

Добавлено через 28 минут
Разобрался сам,спасибо)
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
31.01.2020, 19:05 4
Цитата Сообщение от DebikPython Посмотреть сообщение
Чаще замечаю что многие любят обосрать новичков а не сказать как правильнее
А как его сделать правильным, если он изначально неверный и бессмысленный?
Ответ: выкинь этот код и напиши все заново. И если он будет в отличие от первого иметь хоть какой-то смысл, тогда тебе и посдкажут как его подправить.

P.S. Я не понимаю на каких сферических примерах вы (так называемые новички уровня нуб 100500 степени) учитесь писать код? В Python 200 библиотек. Зайдите папку lib и откройет любой файл. Посмотрите как там оформлен код. Как написаны функции. Как оформлены классы. И не пишите вот такую дичь.

Добавлено через 2 минуты
Цитата Сообщение от DebikPython Посмотреть сообщение
Разобрался сам,спасибо)
Да нифига. Самообман.
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 19:37  [ТС] 5
Бессмысленный?Смысл в нем это практика,как минимум - задание из книги.Выкинь и напиши заного,гениально)Спасибо за совет так и сделаю)Новички если ты не вкурсе,это те кто только начал учить язык,и не понимает что и как нужно выстраивать.Держу вкурсе)

Добавлено через 3 минуты
Обратный вопрос,в чем смысл твоего ответа мне?)Обосрать,ну да зачем заходить в тему и сказать как правильно,лучше сказать выкинь это говно ты не знаешь не напишешь и вообще удали пайтон,да?)
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
31.01.2020, 20:13 6
Цитата Сообщение от DebikPython Посмотреть сообщение
Обратный вопрос,в чем смысл твоего ответа мне?
Чтобы ты понял, что написал говнокод и его проблема не в строчке, в которой ты вызываешь строку как функцию, а в том как он вообще написан. Написан он неверно. И если совет переписать код (удалив бессмысленные вложенные функции и захардкоженные строки) для тебя не совет, тогда продоложай в том же духе, но вряд ли ты чему-то научишься.

Добавлено через 1 минуту
Цитата Сообщение от DebikPython Посмотреть сообщение
ну да зачем заходить в тему
Не тебе решать, в чью тему я буду заходить. Ты как вопрошающий здесь на птичьих правах.
1
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 20:31  [ТС] 7
Вырезать отдельные слова которые обретают другой смысл,гениально
Так так в чем там бессмысленные вложенные функции?Я пытаюсь сделать по заданию.
Выбрать контакт,добавить\удалить,вернуться назад,выйти из программы,что там не нужное?
У меня нет наглядного примера как писать коды,задачу гуглить я не хочу,сам писать хочу

Добавлено через 4 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
вряд ли ты чему-то научишься.
Как я чему-то научусь если нет примера?В гугле другие задачи,там не обьясняют конкретную концепцию написания кода,что нужно сделать что бы как ты говоришь это был не говно код,а прямой и красивый,ведь по факту он вроде делает то что сказанно в задаче,я не знаю как сделать его более правильным и ровным-За советом как это сделать я и спрашиваю конкретно у людей а не у гугла,потому что знающее обьяснят как правильнее сделать
Если просто не хочешь,так не отвечай,это лишь просьба

Добавлено через 4 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
Да нифига. Самообман.
В ошибке я разобрался,но если ты сказал А то что он кривой и не правильный,то понятно что меня это зацепит и я хочу узнать как правильно,ведь до этого момента я думал что я иду по правильному пути
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 20:32 8
DebikPython, тебе реально дельный совет дали - выкинь, подумай и напиши заново но более осмысленно. я написал хранитель паролей в закодированном виде с GUi все работает как хотел но код в одном файле ужасный и теперь я его переписываю как учит дзен. это поверь лучше чем 100 раз читать тему без практики. начнем. return change()? вы понимаете что это рекурсия? зачем?
Python
1
2
3
4
5
6
def change():
    ............
    ............
    if which == "Контакты":
        print(contacts)
        return change()
примерно для сравнения
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import os
import sys
import time
print("---АДРЕСНАЯ КНИГА---")
 
 
def add_cont():
    which2 = input("Введите имя и фамилию контакта: ")
    data = input("Телефон: ")
    contacts[which2] = f'Телефон: {data}'
 
        
def contact():
    print("Ваши контакты:\n")
    for k,v in contacts.items():
        print(k,v)
    print('\n')
                 
contacts = {
                    'Вадя Мусоров' : 'Телефон: 8800613461',
                    'Жопа Генадьевна': 'Телефон: 7980307025',
                    'Ибрагим Консервович': 'Телефон: 87297919645'
                    }        
 
while True:
    whatd = input("Введите действите: \nПосмотреть мои контакты -1\n\
Добавить контакт - 2\nИзменить мои контакты - 3\n>> ")
    if whatd == "1":
        contact()
    elif whatd == "2":
         add_cont()
    elif whatd == "3":
          pass # здесь вызов функции изменения которую вы уж сами напишите
    else:
        print("Завершение программы...")
        time.sleep(2)
        sys.exit()
1
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
31.01.2020, 20:37 9
Цитата Сообщение от DebikPython Посмотреть сообщение
Так так в чем там бессмысленные вложенные функции?
В том что так никто не делает. Вложенные функции используются для создания замыканий.

Строковые литералы типа "Введите действите что бы выбрать его: \nПосмотреть мои контакты\nДобавить контакт\nВвод: " не стоит писать внутри вызова функций и вообще внутри функций. Это и называется харкодинг, что является bad practice.
Для них создается отдельная структура данных из которой эти строки и извлекаются по необходимости.

Рекурсивные вызовы функций должны иметь смысл. Рекурсия используется для обхода вложенных структур.
Функции должны что-то возвращать, а не что-то печатать.

sys.exit - бессымысленная строчка кода которая ничего не делает.
Python
1
2
3
4
>>> import sys
>>> sys.exit
<built-in function exit>
>>>
Строки кода не должны быть длиннее 80 символов. Это называется правильный code style. PEP-8.

Дальше продолжать?

Добавлено через 4 минуты
Цитата Сообщение от DebikPython Посмотреть сообщение
Как я чему-то научусь если нет примера?
Примеры это сам Python и его встроенные библиотеки. Лучше примеров просто не найти.
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 20:42  [ТС] 10
Цитата Сообщение от Garry Galler Посмотреть сообщение
Дальше продолжать?
Было бы не плохо,обьяснить как правельнее сокрощать код,тк я этого не понял,и как я понял ты и имел ввиду что там куча не нужного,я не знаю как его сократить и оставить тот же функционал
Это моя первая практика после книги,до этого я не писал кодов больше 20 строк,поэтому так криво

Добавлено через 2 минуты
Спасибо за пример,но я не хочу переписывать код.Я хочу понять как писать правильно как указывал Garry"не криво"
Понять и писать правильно.К примеру даже не знаю как не функциями добавлять функционал,для каждого действия мне приходится вкладывать функцию,и я не знаю как по другому это сделать
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 20:54 11
Цитата Сообщение от DebikPython Посмотреть сообщение
как не функциями добавлять функционал
пример покажите что вы хотите сделать
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 21:06  [ТС] 12
собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные
данные ваших знакомых. Кроме того, эта информация также должна сохраняться на диске для последующего доступа.
Но я не хочу просто перепесать ваш код,повторяюсь хочу правильно научится писать их и не криво как мне указали выше.
Если не сложно обьясните как правильно это сделать,и для этого кода и в дальнейшем

Добавлено через 1 минуту
Я начал уже это делать вроде получается.Закинул ошибку с которой я уже разобрался но мне сказали что там куча мусора,бессмесленно,нужно переделать,и вообще я кривой)
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 21:17 13
вам пример выше. весь блок запросов на выбор действий заключаете в цикл. и условия выбора по действиям на каждое действие своя функция которая делать только то что должна делать. просмотр - значить показать все в удобном формате, добавить - значить запросить данные и добавить, удалить - запросить данные и удалить, изменить - запросить данные изменения и запросить новые данные и изменить. вот тут мы и видим что запрос данных в каждой функции ( ну по крайней мере имя и фамилия) так вот что бы не писать это в каждой функции почему бы не вынести в отдельную которая будет возвращать результат. вот так потихоньку и уберете лишнее что то добавите и почистите код.
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 21:33  [ТС] 14
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
def contact():
    print("Ваши контакты:\n")
    for k,v in contacts.items():
        print(k,v)
    print('\n')
Не особо вот это,и что значит k,v
И еще не особо понял как работает строка снизу,и для чего нужно "f'"
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
contacts[which2] = f'Телефон: {data}'
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 21:50 15
dict.items() - возвращает пары (ключ, значение). читаем

F-Строки
вот это уже нормальный подход к обучению. без обид на замечания и конкретные вопросы
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 22:13  [ТС] 16
Что можете посоветовать,прочитал кингу укус питона
Загуглил задачи по пайтону,вроде когда открываю решения они очевидные и я должен был понять как это делается,но на очередной задаче стою с яйцом малом и сковородкой в руке,но не знаю как приготовить...
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 22:38 17
ПИТОНТЬЮТОР попробуйте. я начинал с этого без книжек и прочей инфы ничего не понимая даже в основах. регистрация дает возможность посмотреть лучшие решения при правильном своем
1
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 22:44  [ТС] 18
А Грокаем Алгоритмы стоит читать после ПИТОНТЬЮТОР?Если нет то что?Если не сложно посоветуйте что после)
0
4143 / 3067 / 1092
Регистрация: 21.03.2016
Сообщений: 7,723
31.01.2020, 22:47 19
просто начните что то писать на основе своих знаний и форум вам в помощь. это лучший советчик. Грокаем Алгоритмы я даже в глаза не видел, не могу что то советовать.
0
1 / 2 / 1
Регистрация: 27.01.2020
Сообщений: 60
31.01.2020, 22:52  [ТС] 20
А как вы сами изучали python?)

Добавлено через 1 минуту
Говорят без алгоритмов нет смысла писать что то,мол их обязательно нужно знать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2020, 22:52
Помогаю со студенческими работами здесь

'int' object is not callable
import math #горизонтальная координата x = 1 #ускорение свободного падения g = 9.822...

'int' object is not callable
res = 'zzzzz' dict = {} with open('file.txt', 'r') as inpf: s =...

Object is not callable with class
День добрый! Не знаю почему, python 3 выдает ошибку if (self.context_name(line)):...

'float' object is not callable
import math a = int(input()) b = int(input()) c = int(input()) p = (a + b + c) / 2 S =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru