Почему не работает программа в питоне

Я написал сценарий, который довольно темпераментен с отступом, поэтому я решил сделать функции. Я новичок в python, и теперь, когда я создал эти функции, ничего не работает!

def main (): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set

Мне просто интересно, правильно ли это вызывать функции из функции main()? Я обсуждал, возникает ли проблема с отступом внутри вызываемых функций, python, похоже, очень полагается на правильные углубления, даже если он не вызывает ошибки!

Лучший ответ:

Похоже, вам нужно это сделать:

def main(): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set main() # this calls your main function
def main(): wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set if __name__ == ‘__main__’: main() # this calls your main function

Затем запустите его из командной строки следующим образом:

Установка Python под Windows. Устраняем ошибки.


python file_name.py

Встроенная переменная __name__ является текущим контекстным пространством имен. Если вы запустите скрипт из командной строки, он будет эквивалентен ‘__main__’ . Если вы запустите/импортируете файл.py в качестве модуля из другого места, в том числе изнутри интерпретатора, пространство имен (внутри контекста модуля) будет именем файла.py или именем пакета, если оно является частью пакет. Например:

## my_file.py ## print(‘__name__ is ‘.format(__name__)) if __name__ = ‘__main__’: print(«Hello World!»)

Если вы сделаете это из командной строки:

python my_file.py
__name__ is __main__ Hello World!

Однако, если вы импортируете его из интерпретатора, вы можете видеть, что __name__ не __main__ :

>>> from my_file import * >>> __name__ is my_file

Python не вызывает никаких функций при запуске, если явно не задано (включая main ).

Вместо этого Python называет исполняемые файлы, причем основной файл запускается под именем __main__ .

Если вы хотите просто вызвать основную функцию, вы можете использовать ответ Рика.

Однако в лучшей практике Python лучше сделать следующее:

if __name__ == ‘__main__’: wiki_scrape() all_csv() wiki_set = scraped_set(‘locations.csv’) country_set = all_set(‘all.csv’) print wiki_set

Читайте также:
Программы посудомоечной машины беко

Это гарантирует, что если вы используете этот файл python в качестве основного файла (файл, который вы нажимаете или запускаете из cmd), тогда эти функции будут запущены.

Если это вместо этого используется как импортированный модуль, вы все равно можете использовать функции в сценарии, импортирующие модуль, но они не будут вызываться автоматически и, следовательно, не будут мешать вызывающему скрипту.

Источник: techarks.ru

Что означает ошибка SyntaxError: invalid syntax

Ситуация: программист взял в работу математический проект — ему нужно написать код, который будет считать функции и выводить результаты. В задании написано:

Почему не работает программа на Python? Основные ошибки

«Пусть у нас есть функция f(x,y) = xy, которая перемножает два аргумента и возвращает полученное значение».

Программист садится и пишет код:

a = 10 b = 15 result = 0 def fun(x,y): return x y result = fun(a,b) print(result)

Но при выполнении такого кода компьютер выдаёт ошибку:

File «main.py», line 13
result = x y
^
❌ SyntaxError: invalid syntax

Почему так происходит: в каждом языке программирования есть свой синтаксис — правила написания и оформления команд. В Python тоже есть свой синтаксис, по которому для умножения нельзя просто поставить рядом две переменных, как в математике. Интерпретатор находит первую переменную и думает, что ему сейчас объяснят, что с ней делать.

Но вместо этого он сразу находит вторую переменную. Интерпретатор не знает, как именно нужно их обработать, потому что у него нет правила «Если две переменные стоят рядом, их нужно перемножить». Поэтому интерпретатор останавливается и говорит, что у него лапки.

Что делать с ошибкой SyntaxError: invalid syntax

В нашем случае достаточно поставить звёздочку (знак умножения в Python) между переменными — это оператор умножения, который Python знает:

a = 10 b = 15 result = 0 def fun(x,y): return x * y result = fun(a,b) print(result)

В общем случае найти источник ошибки SyntaxError: invalid syntax можно так:

  1. Проверьте, не идут ли у вас две команды на одной строке друг за другом.
  2. Найдите в справочнике описание команды, которую вы хотите выполнить. Возможно, где-то опечатка.
  3. Проверьте, не пропущена ли команда на месте ошибки.
Читайте также:
Двд мейкер это за программа

Практика

Попробуйте найти ошибки в этих фрагментах кода:

x = 10 y = 15 def fun(x,y): return x * y
try: a = 100 b = «PythonRu» assert a = b except AssertionError: print(«Исключение AssertionError.») else: print(«Успех, нет ошибок!»)

Источник: thecode.media

Почему ваша функция не работает? Укажите область видимости в Python

Обложка: Почему ваша функция не работает? Укажите область видимости в Python

Представим ситуацию. Вы написали функцию, инициализировали переменные где-то и собираетесь сделать тест вашего кода.

У вас все получилось, код запускается без ошибок, хотя, вот незадача, функция делает не то, что надо, а точнее — возвращает не желаемое вами значение. Ко всему этому, вы еще и не знаете, как это происходит. Переменные на месте, структура функции в порядке, в чем причина?

Возможно, вы неграмотно воспользовались областью видимости. Давайте рассмотрим пример:

#набор четных чисел list_sqrt = [2,4,6,8,10] #функция для преобразования числа в квадрат def Sum(): #однострочник, который возвращает число в квадрате list_sqrt = [i*i for i in list_sqrt] print(list_sqrt) if __name__ == ‘__main__’: Sum() list_sqrt = [i*i for i in list_sqrt] UnboundLocalError: local variable ‘list_sqrt’ referenced before assignment

Кратко о коде: есть список с числами, с помощью функции нужно, чтобы числа в этом же списке, были возведены в квадрат. Попробуем понять, что ощущает функция во время компилирования: «Хозяин, в строке 6 где происходит списковое включение, в цикле, временная переменная не понимает, по кому она проходит».

Программист-разработчик Python АО «Гринатом» , , можно удалённо , По итогам собеседования

Можем сделать вывод, что временная переменная — i, совершает итерации, а точнее не совершает их вообще, по неопределенной последовательности. А с другого места в коде мы видим, что у нас есть нужная последовательность (строка 2). Тогда почему же функцая не делает то, что надо, а точнее вообще не делает? Все дело в области видимости.

В коде была определена глобальная последовательность и функция, которая использует локальную последовательность, т.е. та, которая должна использоваться и распостраняться в границах функции.

Кратко. В коде происходит попытка использования локальной последовательности в функции — как локальной. В чем и ошибка.

Читайте также:
Отзывы о программе ювелирсофт

Как сделать ее локальной? Ведь без этого ей невозможно воспользоваться в функции? Одним словом — global.

Взглянем на следующий код:

#набор четных чисел list_sqrt = [2,4,6,8,10] #функция для преобразования числа в квадрат def Sum(): #определение последовательности как глобальной для функции global list_sqrt #однострочник, который возвращает число в квадрате list_sqrt = [i*i for i in list_sqrt] print(list_sqrt) if __name__ == ‘__main__’: Sum()

В строке 6 появился один новый элемент, а последовательность все та же. Теперь-то в коде список представляется как глобальный и входит за границы функции, и вывод таков:

[4, 16, 36, 64, 100]

У вас может появиться следующий вопрос: но если последовательность и до этого была в коде глобальной, а после добавления global осталась по-прежнему глобальной, хотя в функции нужен был локальный список, что это за абракадабра?

Все просто. Список и вправду был и есть глобальный. Но все мы знаем, что функция — это отдельный блок кода, как база для избранных. А поскольку глобальность списка распостраняется на ровно такие же части (пустые) кода и не вторгаются в функции и классы, или же попросту отделенные блоки, это и не работает.

А если в блоке (в нашем случае — функции), обозначить последовательность как глобальную не только для пространства в коде, но еще и в желаемом блоке, то границы функции разваливаются, и распахивается дверь для избранного global’ом. И последовательность становится доступной внутри данного блока.

Итоги

Не забывайте о области видимости, зачастую именно из-за нее функции возвращают не то, что хотелось бы.

Здесь я не углублялся в данную тему и попросту рассказал всё своими словами. Вдобавок я оставляю ссылку на небольшую документацию по этой теме.

Простреленное колено, чит-коды и нецензурное оружие: угадайте игру по факту о ней

Простреленное колено, чит-коды и нецензурное оружие: угадайте игру по факту о ней

На этом — все. Если у вас есть своя тема, которую вы не понимаете, но хотите разобрать, пишите в комментариях, обсудим. Всем удачи и Джедай!

Источник: tproger.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru