Як я можу записати код, що перевищує 1 рядок в інтерпретаторі Python?


35

У мене проблема з кодуванням Python в терміналі. Я просто вивчаю основи, тому мені не потрібно створювати .py файли.

У терміналі я можу запустити один рядок коду в інтерпретаторі Python, але як записати більше одного рядка?

Очевидно, що якщо я натиснув Enter, він вводить команду і не йде вниз по рядку.

Я просто хочу перевірити наступне в терміналі:

my_age = 35
my_eyes = 'Blue'
print "my age is %d and my eye color is %s" % (my_age, my_eyes)

1
Я підозрюю, що у вас проблеми з «відступом». A. тип 'python'. Б. >>> підходить. C. Для запуску сценарію сценарій повинен бути належним чином з відступом "вкладками".
r4.

3
Я не запитував, чи правильно це навчання чи ні ... Я задав конкретне запитання, чи знаєте ви відповідь, будь ласка ... якщо ні ...

Відповіді:


32

Додайте зворотний нахил ( \)

Трюк - подібний до того, що ви робили б bash, наприклад, - для додавання зворотного нахилу. Наприклад, якщо я хочу надрукувати 1:

charon:~ werner$ python
>>> print 1
1
>>> print \
... 1
1
>>> 

Якщо ви пишете a \, Python попросить вас ...(рядки продовження) ввести код у наступному рядку, так би мовити.

Побічна примітка: Це автоматично відбувається, коли ви створюєте функцію або визначення класу, тобто часи, коли вам дійсно потрібен новий рядок, тому для цього ніколи не буває справді корисного використання, або принаймні жодного, що я не знаю. Іншими словами, Python досить розумний, щоб усвідомлювати, що вам потрібні рядки продовження, коли ви вводите нове визначення функції або інші подібні конструкції (наприклад if:). У цих автоматичних випадках зауважте, що вам потрібно ввести порожній рядок, \щоб повідомити Python, що ви готові.

Для всього іншого потрібно писати один рядок за іншим. Те, як працює перекладач, полягає в тому, що він, ну, інтерпретує кожен рядок, яким ви його подаєте. Не більше, не менше. Він буде "діяти" лише тоді, коли побачить новий рядок, тому скажіть перекладачеві виконати те, що ви йому дали. Один зворотний косий перешкод заважає перекладачеві отримувати символ нового рядка (тобто він не знатиме, що ви насправді натиснули Enter), але він з часом отримає такий.

Інтерпретатор Python має розширені можливості, коли ви використовуєте лінійку GNU, наприклад, Emacs або vi-style клавіші для навігації по лінії (наприклад Ctrl-A). Однак вони працюють лише в одному поточному рядку. Історія також є, просто спробуйте і натисніть .

Що робити, якщо я хочу запускати складні рядки знову і знову?

Можливо, ви хочете використовувати належні вихідні файли, якщо хочете виконувати більше одного рядка коду одночасно.

Або скористайтеся ноутбуками Jupyter , які пропонують чудовий інтерактивний спосіб створити код Python із вбудованим інтерпретатором. Ви можете писати код так, як у редакторі вихідного коду, але ви можете вибрати, які рядки інтерпретуються разом. Потім ви можете запускати лише частини коду вибірково. Найкращий спосіб - просто спробувати перевірити, чи відповідає це вашому робочому процесу.


:) приємно працює для першого рядка, але що робити, якщо я хочу більше рядків? другий зворотний проріз дає синтаксичну помилку.

То що саме не працює? Просто виберіть і скопіюйте ці рядки та вставте їх у термінал. Вони виконуватимуться зверху вниз так само, як у сценарії, оскільки новий рядок аналізується інтерпретатором. У чому питання?
slhck

1
Я хотів би набрати їх безпосередньо в терміналі, а не писати їх у редакторі та вставляти туди ... здається, марна трата часу :)

Тоді вам доведеться просто набрати один рядок за іншим. Іншого шляху немає. Це перекладач. Він запропонує вам продовжити рядки лише тоді, коли вони вам справді потрібні.
slhck

7

Як щодо використання ;\? Точка з комою сигналізує про закінчення команди, а зворотний косий сигнал, який ми продовжуємо в наступному рядку. Наприклад, наберіть pythonв командному рядку, щоб потрапити в інтерпретатор Python

>>> x=0 ;\
... print(x) ;\
... x=4 ;\
... print(x)

має дати вихід

0
4

2

Простіше кажучи, якщо ви хочете вчитися і хочете запустити більше одного рядка, ви записуєте його у файл .py.

Метод зворотної косої риски хороший, коли ви швидко хочете виконати ряд команд, але це не допомагає, коли ви навчаєтесь.

Ви зможете краще розробити код, редагувати окремі команди, не турбуючись про помилки написання, та повторно використовувати фрагменти коду, які вважатимуться корисними, якщо записати їх у невеликий файл.


1
Так, я згоден. Але я на базовому рівні. Я не пишу нічого корисного, просто дурне тестування змінних і математику тощо. Нічого гідного навіть створення файлу. Дякую за пораду, хоча.

Навіть просту математику варто помістити у файл - якщо це 3 чи більше рядків, я би це робив у vi сам. Навіть просто так воно є, якщо мені цікаво, що я зробив пізніше.
Rory Alsop

1

Я просто набрав наступне у своєму запиті оболонки, і воно спрацювало чудово:

$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> my_age = 35
>>> my_eyes = 'Blue'
>>> print "my age is %d and my eye color is %s" % (my_age, my_eyes)
my age is 35 and my eye color is Blue
>>> 

Спосіб введення більше одного рядка коду в інтерактивному інтерпретаторі Python полягає в тому, щоб набрати більше одного рядка коду в інтерактивному інтерпретаторі Python. Я думаю, це було б досить добре для ваших цілей.

Це правда, що ви отримаєте нове підказку після кожного рядка, а це означає, що якщо два ваших рядки коду дають вихід, цей вихід буде розділений підказками. Я думаю, що це вас хвилює, хоча приклад у вашому запитанні не пропонує:

$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "first line"
first line
>>> print "second line"
second line
>>> 

Якщо це проблема, ви можете долучити кілька заяв до (належним чином з відступом!) if:

$ python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> if 1:
...     print "first line"
...     print "second line"
... 
first line
second line
>>> 

(Я б запропонував, хоча це не відповідає на ваше запитання, що якщо ви пишете код, який є досить складним для цього питання, вам слід писати сценарії. Можливо, ви почали це робити в півтора року. оскільки ви опублікували це запитання.)


0

Я просто переживав відповідь, яку ви отримали. Я продовжував експериментувати, вкладаючи різні символи. Нарешті, я отримав правильний синтаксис, щоб написати його. Спробуйте наступне

print("more string") ; print(3)

це дасть результат

more string

3

без жодної помилки

я щойно використав ';' щоб змусити його писати в іншому рядку

сподіваюся, моя відповідь може вам допомогти


0

Просто залиште оболонку і відкрийте новий файл редактора. Тобто перейдіть до файлу та відкрийте новий файл. Напишіть скільки завгодно рядків кодів.


-2

На трьох крапках переконайтесь, що натисніть клавішу "вкладка", перш ніж ввести наступну команду. Ви можете продовжувати писати стільки команд таким чином. Отже, коли ви натискаєте клавішу Enter після написання другого рядка коду, інтерпретатор дозволяє вводити третій рядок коду ... як у прикладі Фібоначчі внизу (з підручника):

a, b = 0,1, а b <10: ... print (b) # Якщо ви введете команду print безпосередньо після крапок і натисніть клавішу введення в кінці, ви отримаєте помилку відступу. Замість цього натисніть на вкладку після трьох крапок, потім напишіть свій код і натисніть клавішу введення, це дозволить u ввести третій рядок коду тощо. Подивіться нижче на приклад (з підручника):

a, b = 0,1 # Далі клавіша введення, тоді як b <10: # Далі клавіша введення ... print (b) # Далі клавіша введення. зверніть увагу на вкладку після трьох крапок ... a, b = b, a + b # Далі клавіша введення ... клавіша введення # Немає більше команд для введення

ви побачите результат вищезгаданої прог

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.