Làm cách nào để viết mã hơn 1 dòng trong trình thông dịch Python?


35

Tôi có một vấn đề mã hóa Python trong thiết bị đầu cuối. Tôi chỉ đang học những điều cơ bản nên tôi không có nhu cầu tạo tập tin .py.

Trong terminal tôi có thể chạy một dòng mã trong trình thông dịch Python, nhưng làm cách nào để viết nhiều hơn một dòng?

Rõ ràng nếu tôi nhấn enter, nó sẽ nhập lệnh và không đi xuống một dòng.

Tôi chỉ muốn kiểm tra sau trong thiết bị đầu cuối:

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

1
Tôi nghi ngờ bạn đang gặp vấn đề với 'thụt đầu dòng'. A. gõ 'trăn'. B. >>> đi lên. C. Để chạy tập lệnh, tập lệnh cần được thụt lề chính xác bằng 'tab'.
r4.

3
Tôi không hỏi liệu cách của tôi nếu học có đúng hay không ... Tôi đã hỏi một câu hỏi cụ thể, nếu bạn biết câu trả lời xin vui lòng ... nếu không ...

Câu trả lời:


32

Thêm dấu gạch chéo ngược ( \)

Thủ thuật là - tương tự như những gì bạn sẽ làm bash, ví dụ - để thêm dấu gạch chéo ngược. Ví dụ: nếu tôi muốn in một 1:

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

Nếu bạn viết một \, Python sẽ nhắc bạn với ...(các dòng tiếp tục) để nhập mã vào dòng tiếp theo, có thể nói như vậy.

Lưu ý bên lề: Đây là những gì tự động xảy ra khi bạn tạo một định nghĩa hàm hoặc lớp, tức là những lúc bạn thực sự cần một dòng mới, vì vậy không bao giờ sử dụng thực sự tốt cho điều đó, hoặc ít nhất là không có gì tôi biết. Nói cách khác, Python đủ thông minh để nhận thức rằng bạn cần các dòng tiếp tục khi bạn đang nhập một định nghĩa hàm mới hoặc các cấu trúc tương tự khác (ví dụ if:). Trong các trường hợp tự động này, xin lưu ý rằng bạn cần nhập một dòng trống bằng cách sử dụng \để nói với Python rằng bạn đã hoàn tất.

Đối với mọi thứ khác, bạn cần phải viết một dòng sau một dòng khác. Cách một trình thông dịch làm việc là nó, tốt, diễn giải mọi dòng mà bạn cung cấp nó. Không hơn, không ít. Nó sẽ chỉ "hành động" khi nhìn thấy một dòng mới, do đó yêu cầu người phiên dịch thực hiện những gì bạn đã đưa ra. Dấu gạch chéo ngược đơn sẽ ngăn trình thông dịch không bao giờ nhận được ký tự dòng mới (nghĩa là nó sẽ không biết rằng bạn thực sự đã nhấn Enter), nhưng cuối cùng nó sẽ nhận được một ký tự.

Trình thông dịch của Python có các khả năng nâng cao khi bạn sử dụng đường đọc GNU, chẳng hạn như phím bấm Emacs hoặc phím kiểu vi để điều hướng trong một dòng (ví dụ Ctrl-A). Tuy nhiên, những người chỉ làm việc trong một dòng hiện tại. Lịch sử là có, chỉ cần thử và nhấn .

Điều gì xảy ra nếu tôi muốn chạy các dòng phức tạp nhiều lần?

Bạn có thể muốn sử dụng các tệp nguồn thích hợp nếu bạn muốn thực thi nhiều dòng mã cùng một lúc.

Hoặc, sử dụng sổ ghi chép Jupyter , cung cấp một cách tương tác tuyệt vời để tạo mã Python với trình thông dịch tích hợp. Bạn có thể viết mã như trong trình soạn thảo mã nguồn, nhưng bạn có thể chọn các dòng được diễn giải cùng nhau. Sau đó, bạn chỉ có thể chạy các phần của mã một cách chọn lọc. Cách tốt nhất là chỉ cần thử và xem nếu điều đó phù hợp với quy trình làm việc của bạn.


:) hoạt động tốt cho dòng đầu tiên, nhưng nếu tôi muốn nhiều dòng hơn thì sao? dấu gạch chéo thứ hai cho lỗi cú pháp.

Vì vậy, những gì chính xác là không làm việc? Chỉ cần chọn và sao chép các dòng đó, sau đó dán chúng vào thiết bị đầu cuối. Họ sẽ thực thi từ trên xuống dưới giống như trong một tập lệnh, vì dòng mới được trình thông dịch phân tích cú pháp. Vấn đề là gì?
slhck

1
Tôi muốn nhập chúng trực tiếp vào thiết bị đầu cuối, thay vì viết nó trong trình chỉnh sửa và dán nó vào đó ... có vẻ như lãng phí thời gian :)

Sau đó, bạn chỉ cần gõ một dòng sau một dòng khác. Không có cách nào khác. Đó là một thông dịch viên. Nó sẽ nhắc bạn cho các dòng tiếp tục chỉ khi bạn thực sự cần chúng.
slhck

7

Làm thế nào về việc sử dụng ;\? Dấu chấm phẩy báo hiệu kết thúc lệnh và dấu hiệu dấu gạch chéo ngược mà chúng ta đang tiếp tục trên dòng tiếp theo. Ví dụ: nhập pythondòng lệnh để vào trình thông dịch Python, sau đó

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

nên cho một đầu ra của

0
4

2

Nói một cách đơn giản, nếu bạn muốn tìm hiểu và muốn chạy nhiều hơn một dòng bạn viết nó thành một tệp .py.

Phương pháp dấu gạch chéo ngược là tốt khi bạn nhanh chóng muốn chạy một loạt các lệnh, nhưng nó không giúp ích gì khi bạn đang học.

Bạn sẽ có thể phát triển mã tốt hơn, chỉnh sửa các lệnh riêng lẻ mà không phải lo lắng về lỗi chính tả và sử dụng lại các đoạn mã bạn thấy hữu ích nếu bạn viết chúng thành một tệp nhỏ.


1
Vâng tôi đồng ý. Nhưng tôi đang ở mức độ cơ bản. Tôi không viết bất cứ điều gì hữu ích, chỉ là kiểm tra biến và toán học ngu ngốc, vv Không có gì xứng đáng để tạo một tệp. Cảm ơn lời khuyên mặc dù.

Ngay cả toán học đơn giản cũng đáng để đặt vào một tệp - nếu đó là 3 dòng trở lên tôi sẽ tự làm nó trong vi. Thậm chí chỉ có vậy nếu tôi tự hỏi những gì tôi đã làm sau này.
Rory Alsop

1

Tôi chỉ cần gõ như sau tại dấu nhắc shell của mình và nó hoạt động rất tốt:

$ 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
>>> 

Cách để nhập nhiều hơn một dòng mã trong trình thông dịch Python tương tác là, để nhập nhiều hơn một dòng mã trong trình thông dịch Python tương tác. Tôi nghĩ rằng nó sẽ đủ tốt cho mục đích của bạn.

Đúng là bạn sẽ nhận được một lời nhắc mới sau mỗi dòng, điều đó có nghĩa là nếu hai trong số các dòng mã của bạn tạo ra đầu ra, thì đầu ra đó sẽ được phân tách bằng các lời nhắc. Tôi đoán đó là những gì bạn quan tâm, mặc dù ví dụ trong câu hỏi của bạn không gợi ý rằng:

$ 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
>>> 

Nếu đó là một vấn đề, bạn có thể gửi nhiều câu lệnh của mình vào câu lệnh (được thụt lề chính xác!) 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
>>> 

(Tôi đề nghị, mặc dù nó không trả lời câu hỏi của bạn, rằng nếu bạn viết mã đủ phức tạp cho vấn đề này, bạn nên viết kịch bản. Có lẽ bạn đã bắt đầu làm như vậy trong một năm rưỡi kể từ khi bạn đăng câu hỏi.)


0

Tôi vừa mới trải qua câu trả lời mà bạn đã có. Tôi tiếp tục thử nghiệm bằng cách đặt các ký hiệu khác nhau. Cuối cùng tôi đã có cú pháp đúng để viết nó. Hãy thử như sau

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

điều này sẽ cho bạn một kết quả

more string

3

không có lỗi

tôi vừa mới sử dụng ';' để làm cho nó viết trong một dòng khác

tôi hy vọng câu trả lời của tôi có thể giúp bạn


0

Chỉ cần để lại shell và mở một tập tin biên tập mới. Tức là đi đến tập tin và mở tập tin mới. Viết nhiều dòng mã như bạn muốn.


-2

Tại ba dấu chấm, đảm bảo nhấn phím "tab" trước khi bạn nhập lệnh tiếp theo. Bạn có thể tiếp tục viết nhiều lệnh theo cách đó. Vì vậy, khi bạn nhấn enter sau khi viết dòng mã thứ hai, trình thông dịch cho phép bạn nhập dòng mã thứ ba ... giống như trong ví dụ về Fibonacci bên dưới (từ hướng dẫn):

a, b = 0,1 trong khi b <10: ... print (b) # Nếu bạn nhập lệnh in ngay sau dấu chấm và nhấn phím enter ở cuối, bạn sẽ gặp lỗi thụt lề. Thay vào đó, nhấn tab sau ba dấu chấm, sau đó viết mã của bạn và nhấn phím enter, nó sẽ cho phép bạn nhập dòng mã thứ ba, v.v. Nhìn vào ví dụ dưới đây (từ hướng dẫn):

a, b = 0,1 # Được theo dõi bởi phím enter trong khi b <10: # Được theo dõi bởi phím enter ... print (b) # Tiếp theo là phím enter. lưu ý tab sau ba dấu chấm ... a, b = b, a + b # Tiếp theo là phím enter ... nhập khóa # Không còn lệnh nào để nhập

bạn sẽ thấy kết quả của prog ở trên

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.