Hướng dẫn xuống dòng python

Hãy nhớ lại đoạn mã của chương trình mà chúng ta viết ở bài học trước:

print("Hello World!")

Làm thế nào để khi chạy dòng lệnh trên máy tính (hay cụ thể là Python Interperter) có thể hiểu được phải hiển thị ra dòng chữ Hello World!?

Ngôn ngữ Python (hoặc bất cứ ngôn ngữ lập trình nào khác) đưa ra các quy tắc viết mã lệnh mà lập trình viên cần phải tuân theo. Và khi thực thi chương trình Python Interperter cũng sẽ dựa trên các quy tắc viết để biên dịch ra mã máy (chỉ gồm số 0 và 1) giúp máy tính có thể hiểu và thực hiện được các tác vụ tương ứng.

Nếu không tuân theo đúng cú pháp thì Python (Interperter) sẽ báo lỗi khi chạy mã lệnh của bạn viết ra. Ở ví dụ sau đây lập trình viên thiếu đặt cặp dấu ngoặc bao ngoài cụm từ Hello World!:

print Hello World!

Và khi chạy Python sẽ báo lỗi syntax không hợp lệ như sau:

Câu Lệnh (Statement)

Một câu lệnh được sử dụng để thực hiện một tác vụ nào đó. Trong hello_world.py chúng ta có một câu lệnh duy nhất:

print("Hello World!")

Để kết thúc một câu lệnh trong Python bạn có thể sử dụng dấu ;:

print("Hello World!");

Lưu ý: Thông thường các lập trình viên không dùng dấu ; ở cuối câu lệnh trong Python.

Một chương trình python có thể gồm một hay nhiều câu lệnh khác nhau.

Chú thích được sử dụng để giải thích ý nghĩa của các câu lệnh trong chương trình.

Ví dụ:

# Hiển thị "Hello World!" print("Hello World!")

Dòng đầu tiên ở đoạn mã trên là một comment vì nó được bắt đầu bởi ký tự #. Python (Interpreter) sẽ bỏ qua dòng này khi thực thi chương trình.

Bạn cũng có thể đặt comment phía sau câu lệnh:

print("Hello World!") # Hiển thị "Hello World!"

Bạn có thể thấy rằng với chương trình đơn giản như Hello World ở trên thì việc sử dụng comment là hơi dư thừa, tuy nhiên khi bước vào làm việc với các dự án thực tế mà ở đó source code có thể lên tới vài ngàn hoặc hàng triệu dòng thì việc sử dụng chú thích là rất cần thiết.

Để viết các comment dài nhiều dòng chúng ta sử dụng cặp 3 dấu nháy kép (tripple double-quote) như sau:

""" Khi sử dụng print trong Python bạn cần nhớ: Đặt văn bản bên trong cặp dấu nháy đơn, ví dụ: 'Hello World!' Hoặc bên trong cặp dấu nháy kép, ví dụ: "Hello World!" """ print("Hello World!")

Lưu ý: Một số comment đặc biệt vẫn được chương trình Python Interpreter đọc khi chạy chương trình, ví dụ như comment #!/usr/bin/python mà chúng ta đã được tìm hiểu ở cuối bài học Hello World.

Xuống Dòng (Trong Source Code)

Khi cần hiển thị một đoạn văn bản gồm nhiều dòng, chúng ta có thể ngắn dòng bằng cách sử dụng ký tự \. Cách làm này để source code nhìn gọn gàng hơn. Ví dụ:

print "Đoạn văn bản trong ví dụ này bao gồm nhiều câu và do đó \ ta sẽ tách nó thành nhiều dòng để dễ đọc hơn.\ Câu thứ 1 balabla.\ Câu thứ 2 balabla."

Hoặc bạn cũng có thể sử dụng cặp 3 dấu nháy kép (hoặc nháy đơn) như sau:

print """Đoạn văn bản trong ví dụ này bao gồm nhiều câu và do đó \ ta sẽ tách nó thành nhiều dòng để dễ đọc hơn.\ Câu thứ 1 balabla.\ Câu thứ 2 balabla."""

Lưu ý: Bạn cần phân biệt cách sử dụng cặp 3 dấu nháy kép như trên không đặt chúng ở đầu dòng mà sau print nên chúng không tạo ra một chú thích (comment) như những gì đã học ở phần trước.

Ký Tự Đặc Biệt

Để hiển thị các ký tự đặc biệt như tab, xuống dòng (ở ví dụ trên chúng ta dùng \ để xuống dòng trong source code, còn khi hiển thị thì văn bản vẫn nằm ở cùng một dòng. Hai tình huống này khác nhau nhé!), dấu nháy đơn, dấu nháy kép... chúng ta sẽ sử dụng kết hợp ký tự \ theo sau bởi một chữ cái in thường ứng với ký tự đặc biệt cần hiển thị. Ví dụ để hiển thị tab chúng ta sử dụng \t (t được lấy từ chữ cái đầu của từ tab):

print("\tHello World!")

Để xuống dòng mới (khi hiển thị):

print("Hello\nWorld!")

Để hiển thị dấu nháy kép:

print("\"Hello World\!"")

Hoặc với ví dụ trên bạn cũng có thể làm như sau:

print('"Hello World!"')

Và cuối cùng nếu bạn cần hiển thị ký tự \:

print("Hello\\World!") 1/29/2009 8:58:25 PM

Nguyễn Mộng Quỳnh · Nguyễn Mộng Quỳnh 20:58 29/01/2009

Tôi muốn làm điều đó trong con trăn. Điều tôi muốn làm trong ví dụ này trongc:

Trong C:

#include int main() { int i; for (i=0; i<10; i++) printf("."); return 0; }

Đầu ra:

..........

Trong Python:

>>> for i in range(10): print('.') . . . . . . . . . . >>> print('.', '.', '.', '.', '.', '.', '.', '.', '.', '.') . . . . . . . . . .

Trong Python printsẽ thêm một \nhoặc khoảng trắng, làm cách nào tôi có thể tránh điều đó? Bây giờ, nó chỉ là một ví dụ, đừng nói với tôi rằng trước tiên tôi có thể xây dựng một chuỗi sau đó in nó. Tôi muốn biết cách "nối" các chuỗi vào stdout.

2080 hữu ích 4 bình luận 2.0m xem chia sẻ

answer

Lê Quốc Bình · Lê Quốc Bình 21:01 29/01/2009

Trong Python 3, bạn có thể sử dụng các tham số sep=và end=của printhàm:

Để không thêm một dòng mới vào cuối chuỗi:

print('.', end='')

Để không thêm khoảng trắng giữa tất cả các đối số hàm bạn muốn in:

print('a', 'b', 'c', sep='')

Bạn có thể chuyển bất kỳ chuỗi nào cho một trong hai tham số và bạn có thể sử dụng cả hai tham số cùng một lúc.

Nếu bạn gặp sự cố với bộ đệm, bạn có thể xóa đầu ra bằng cách thêm flush=Trueđối số từ khóa:

print('.', end='', flush=True)

Python 2.6 và 2.7

Từ Python 2.6, bạn có thể nhập printhàm từ Python 3 bằng __future__mô-đun :

from __future__ import print_function

cho phép bạn sử dụng giải pháp Python 3 ở trên.

Tuy nhiên, lưu ý rằng flushtừ khóa không có sẵn trong phiên bản của printhàm được nhập từ __future__Python 2; nó chỉ hoạt động trong Python 3, cụ thể hơn là 3.3 trở lên. Trong các phiên bản trước đó, bạn vẫn cần xóa thủ công bằng một cuộc gọi tới sys.stdout.flush(). Bạn cũng sẽ phải viết lại tất cả các câu lệnh in khác trong tệp mà bạn thực hiện việc nhập này.

Hoặc bạn có thể sử dụng sys.stdout.write()

import sys sys.stdout.write('.')

Bạn cũng có thể cần gọi

sys.stdout.flush()

để đảm bảo stdoutđược xả ngay lập tức.

2840 hữu ích 5 bình luận chia sẻ

answer

Võ Dương Anh · Võ Dương Anh 10:09 27/07/2012

Nó sẽ đơn giản như được mô tả tại liên kết này của Guido Van Rossum:

Re: Làm thế nào để in mà không có ac / r?

http://legacy.python.org/search/hypermail/python-1992/0115.html

Có thể in thứ gì đó nhưng không tự động có dấu xuống dòng được thêm vào nó không?

Có, thêm dấu phẩy sau đối số cuối cùng để in. Ví dụ, vòng lặp này in các số 0..9 trên một dòng được phân tách bằng dấu cách. Lưu ý "print" không tham số sẽ thêm dòng mới cuối cùng:

>>> for i in range(10): ... print i, ... else: ... print ... 0 1 2 3 4 5 6 7 8 9 >>>

297 hữu ích 5 bình luận chia sẻ

answer

Lê Đức Thiên · Lê Đức Thiên 21:24 29/01/2009

Lưu ý: Tiêu đề của câu hỏi này từng là một cái gì đó như "Làm thế nào để printf trong python?"

Vì mọi người có thể đến đây tìm kiếm nó dựa trên tiêu đề, Python cũng hỗ trợ thay thế kiểu printf:

>>> strings = [ "one", "two", "three" ] >>> >>> for i in xrange(3): ... print "Item %d: %s" % (i, strings[i]) ... Item 0: one Item 1: two Item 2: three

Và, bạn có thể nhân các giá trị chuỗi một cách thủ công:

>>> print "." * 10 ..........

174 hữu ích 5 bình luận chia sẻ

answer

Hoàng Minh Quang · Hoàng Minh Quang 20:50 21/02/2011

Sử dụng hàm in kiểu python3 cho python2.6 + (cũng sẽ phá vỡ mọi câu lệnh in có từ khóa hiện có trong cùng một tệp.)

# for python2 to use the print() function, removing the print keyword from __future__ import print_function for x in xrange(10): print('.', end='')

Để không làm hỏng tất cả các từ khóa in python2 của bạn, hãy tạo một printf.pytệp riêng

# printf.py from __future__ import print_function def printf(str, *args): print(str % args, end='')

Sau đó, sử dụng nó trong tệp của bạn

from printf import printf for x in xrange(10): printf('.') print 'done' #..........done

Các ví dụ khác hiển thị kiểu printf

printf('hello %s', 'world') printf('%i %f', 10, 3.14) #hello world10 3.140000

96 hữu ích 0 bình luận chia sẻ

answer

Hoàng Tuyết Xuân · Hoàng Tuyết Xuân 17:16 03/12/2010

Cách in trên cùng một dòng:

import sys for i in xrange(0,10): sys.stdout.write(".") sys.stdout.flush()

44 hữu ích 0 bình luận chia sẻ

answer

Hoàng Bích Như · Hoàng Bích Như 21:07 29/01/2009

Hàm mới (kể từ Python 3.x) printcó một endtham số tùy chọn cho phép bạn sửa đổi ký tự kết thúc:

print("HELLO", end="") print("HELLO")

Đầu ra:

XIN CHÀO

Ngoài ra còn có sepdấu phân cách:

print("HELLO", "HELLO", "HELLO", sep="")

Đầu ra:

XIN CHÀO XIN CHÀO XIN CHÀO

Nếu bạn muốn sử dụng cái này trong Python 2.x, chỉ cần thêm cái này vào đầu tệp của bạn:

from __future__ import print_function

32 hữu ích 3 bình luận chia sẻ

answer

Bùi Thiên Mai · Bùi Thiên Mai 01:55 17/06/2015

Sử dụng functools.partial để tạo một hàm mới có tên printf

>>> import functools >>> printf = functools.partial(print, end="") >>> printf("Hello world\n") Hello world

Cách dễ dàng để bọc một hàm với các tham số mặc định.

23 hữu ích 0 bình luận chia sẻ

answer

Hoàng Chung Thủy · Hoàng Chung Thủy 19:45 10/07/2014

Bạn chỉ có thể thêm ,vào cuối printhàm để nó không in trên dòng mới.

17 hữu ích 4 bình luận chia sẻ

answer

Đặng Tuyết Xuân · Đặng Tuyết Xuân 21:22 09/07/2016

Trong Python 3+, printlà một hàm. Khi bạn gọi

print('hello world')

Python dịch nó thành

print('hello world', end='\n')

Bạn có thể thay đổi endbất cứ điều gì bạn muốn.

print('hello world', end='') print('hello world', end=' ')

15 hữu ích 0 bình luận chia sẻ

answer

Lê Kim Tuyền · Lê Kim Tuyền 17:09 22/07/2015

python 2.6+ :

from __future__ import print_function # needs to be first statement in file print('.', end='')

trăn 3 :

print('.', end='')

python <= 2,5 :

import sys sys.stdout.write('.')

nếu không gian thừa là OK sau mỗi lần in, trong python 2

print '.',

gây hiểu lầm trong python 2 - tránh :

print('.'), # avoid this if you want to remain sane # this makes it look like print is a function but it is not # this is the `,` creating a tuple and the parentheses enclose an expression # to see the problem, try: print('.', 'x'), # this will print `('.', 'x') `

10 hữu ích 0 bình luận chia sẻ

answer

Hồ Mỹ Dung · Hồ Mỹ Dung 12:03 23/11/2015

Bạn co thể thử:

import sys import time # Keeps the initial message in buffer. sys.stdout.write("\rfoobar bar black sheep") sys.stdout.flush() # Wait 2 seconds time.sleep(2) # Replace the message with a new one. sys.stdout.write("\r"+'hahahahaaa ') sys.stdout.flush() # Finalize the new message by printing a return carriage. sys.stdout.write('\n')

9 hữu ích 0 bình luận chia sẻ

answer

Hoàng Gia Kiệt · Hoàng Gia Kiệt 17:37 05/07/2013

Bạn có thể làm tương tự trong python3 như sau:

#!usr/bin/python i = 0 while i<10 : print('.',end='') i = i+1

và thực hiện nó với python filename.pyhoặcpython3 filename.py

6 hữu ích 0 bình luận chia sẻ

answer

Đỗ Ngọc Uyên · Đỗ Ngọc Uyên 03:39 18/06/2012

gần đây tôi đã gặp vấn đề tương tự ..

tôi đã giải quyết nó bằng cách:

import sys, os # reopen stdout with "newline=None". # in this mode, # input: accepts any newline character, outputs as '\n' # output: '\n' converts to os.linesep sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None) for i in range(1,10): print(i)

tính năng này hoạt động trên cả unix và windows ... chưa thử nghiệm nó trên macosx ...

hth

6 hữu ích 1 bình luận chia sẻ

answer

Hoàng Hoàng Ân · Hoàng Hoàng Ân 04:35 28/02/2015

@lenooh đã làm hài lòng truy vấn của tôi. Tôi đã phát hiện ra bài viết này trong khi tìm kiếm 'python ức chế dòng mới'. Tôi đang sử dụng IDLE3 trên Raspberry Pi để phát triển Python 3.2 cho PuTTY. Tôi muốn tạo một thanh tiến trình trên dòng lệnh PuTTY. Tôi không muốn trang cuộn đi. Tôi muốn có một đường ngang để đảm bảo lại với người dùng rằng chương trình không bị dừng lại cũng như không được đưa đến bữa trưa trên một vòng lặp vô hạn vui vẻ - như một lời cầu xin 'hãy để tôi yên, tôi vẫn ổn, nhưng điều này có thể mất một thời gian. ' tin nhắn tương tác - giống như thanh tiến trình trong văn bản.

Thông báo print('Skimming for', search_string, '\b! .001', end='')khởi tạo thông báo bằng cách chuẩn bị cho lần ghi màn hình tiếp theo, sẽ in ra ba khoảng cách ngược dưới dạng ⌫⌫⌫ rubout và sau đó là một dấu chấm, xóa sạch '001' và kéo dài dòng dấu chấm. Sau khi search_stringnhập liệu của người dùng vẹt, \b!dấu chấm than trong search_stringvăn bản của tôi lùi vào khoảng trống mà print()ngược lại buộc phải đặt đúng dấu câu. Theo sau đó là một khoảng trắng và 'dấu chấm' đầu tiên của 'thanh tiến trình' mà tôi đang mô phỏng. Không cần thiết, thông báo sau đó cũng được đánh đầu bằng số trang (được định dạng có độ dài là ba với các số không ở đầu) để người dùng thông báo rằng tiến trình đang được xử lý và điều này cũng sẽ phản ánh số khoảng thời gian mà chúng tôi sẽ xây dựng sau này cho đúng.

import sys page=1 search_string=input('Search for?',) print('Skimming for', search_string, '\b! .001', end='') sys.stdout.flush() # the print function with an end='' won't print unless forced while page: # some stuff… # search, scrub, and build bulk output list[], count items, # set done flag True page=page+1 #done flag set in 'some_stuff' sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat sys.stdout.flush() if done: #( flag alternative to break, exit or quit) print('\nSorting', item_count, 'items') page=0 # exits the 'while page' loop list.sort() for item_count in range(0, items) print(list[item_count]) #print footers here if not (len(list)==items): print('#error_handler')

Thịt thanh tiến trình nằm trong sys.stdout.write('\b\b\b.'+format(page, '03'))dòng. Đầu tiên, để xóa ở bên trái, nó sao lưu con trỏ qua ba ký tự số với '\ b \ b \ b' khi ⌫⌫⌫ chạy và bỏ dấu chấm mới để thêm vào độ dài thanh tiến trình. Sau đó, nó viết ba chữ số của trang mà nó đã phát triển cho đến nay. Bởi vì sys.stdout.write()đợi bộ đệm đầy đủ hoặc kênh đầu ra đóng lại, sys.stdout.flush()buộc phải ghi ngay lập tức. sys.stdout.flush()được tích hợp vào phần cuối print()được bỏ qua với print(txt, end='' ). Sau đó, mã lặp lại các hoạt động tốn nhiều thời gian thông thường của nó trong khi nó không in gì nữa cho đến khi nó quay trở lại đây để xóa ba chữ số trở lại, thêm dấu chấm và viết lại ba chữ số, tăng dần.

Ba chữ số được xóa và viết lại hoàn toàn không cần thiết - nó chỉ là một dấu thăng hoa minh chứng cho sự sys.stdout.write()so sánh print(). Bạn có thể dễ dàng tính nguyên tố với một dấu chấm và quên đi ba dấu gạch chéo ngược-b ⌫ lạ mắt (tất nhiên cũng không viết số trang được định dạng) bằng cách in thanh dấu chấm dài hơn mỗi lần một dấu chấm - không có dấu cách hoặc dòng mới chỉ bằng cách sử dụng sys.stdout.write('.'); sys.stdout.flush()đôi.

Xin lưu ý rằng trình bao Raspberry Pi IDLE3 Python không tôn trọng backspace dưới dạng ⌫ rubout mà thay vào đó in ra một khoảng trắng, thay vào đó tạo ra một danh sách rõ ràng các phân số.

- (o = 8> wiz

5 hữu ích 0 bình luận chia sẻ

answer

Nguyễn Tùng Lâm · Nguyễn Tùng Lâm 05:54 09/03/2017

Bạn sẽ nhận thấy rằng tất cả các câu trả lời trên đều đúng. Nhưng cuối cùng tôi muốn tạo một phím tắt để luôn viết tham số "end = ''".

Bạn có thể xác định một hàm như

def Print(*args,sep='',end='',file=None,flush=False): print(*args,sep=sep,end=end,file=file,flush=flush)

Nó sẽ chấp nhận tất cả số lượng tham số. Thậm chí nó sẽ chấp nhận tất cả các tham số khác như tệp, tuôn ra, v.v. và có cùng tên.

5 hữu ích 1 bình luận chia sẻ

answer

Phạm Minh Dân · Phạm Minh Dân 18:46 24/11/2015

Nhiều câu trả lời trong số này có vẻ hơi phức tạp. Trong Python 3.x, bạn chỉ cần thực hiện điều này:

print(, , ..., , end=" ")

Giá trị mặc định của end là "\n". Chúng tôi chỉ đơn giản là thay đổi nó thành một khoảng trắng hoặc bạn cũng có thể sử dụng end=""(không có khoảng trắng) để làm những gì printfbình thường.

5 hữu ích 0 bình luận chia sẻ

answer

Phạm Thành Trung · Phạm Thành Trung 14:18 23/07/2015

bạn muốn in thứ gì đó trong vòng lặp for ngay; nhưng bạn không muốn nó in ở dòng mới mỗi lần .. ví dụ:

for i in range (0,5): print "hi" OUTPUT: hi hi hi hi hi

nhưng bạn muốn nó in như thế này: hi hi hi hi hi hi hi đúng không ???? chỉ cần thêm dấu phẩy sau khi in "hi"

Thí dụ:

for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi

4 hữu ích 1 bình luận chia sẻ

answer

Dương Nam Phi · Dương Nam Phi 01:41 17/10/2018

Hoặc có một chức năng như:

def Print(s): return sys.stdout.write(str(s))

Ngay sau đó:

for i in range(10): # or `xrange` for python 2 version Print(i)

Kết quả đầu ra:

0123456789

2 hữu ích 0 bình luận chia sẻ

answer

Đỗ Ðức Bảo · Đỗ Ðức Bảo 13:35 20/08/2018

Có hai cách chung để làm điều này:

In không có dòng mới trong Python 3.x

Không thêm gì sau câu lệnh in và xóa '\ n' bằng cách sử dụng end='' như:

>>> print('hello') hello # appending '\n' automatically >>> print('world') world # with previous '\n' world comes down # solution is: >>> print('hello', end='');print(' world'); # end with anything like end='-' or end=" " but not '\n' hello world # it seem correct output

Một ví dụ khác trong Loop :

for i in range(1,10): print(i, end='.')

In không có dòng mới trong Python 2.x

Thêm một dấu phẩy ở cuối cho biết rằng sau khi in bỏ qua \n.

>>> print "hello",; print" world" hello world

Một ví dụ khác trong Loop :

for i in range(1,10): print "{} .".format(i),

Hy vọng điều này sẽ giúp bạn. Bạn có thể truy cập liên kết này .

2 hữu ích 5 bình luận chia sẻ

answer

Phan Nam Lộc · Phan Nam Lộc 08:01 03/07/2020

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 print(i)

Đoạn mã trên cho kết quả sau:

0 1 2 3 4

Nhưng nếu bạn muốn in tất cả các đầu ra này theo một đường thẳng thì tất cả những gì bạn nên làm là thêm một thuộc tính gọi là end () để in.

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 print(i, end=" ")

Đầu ra:

0 1 2 3 4

Và không chỉ là khoảng trắng, bạn cũng có thể thêm các phần cuối khác cho đầu ra của mình. Ví dụ,

for i in range(0, 5): #setting the value of (i) in the range 0 to 5 print(i, end=", ")

Đầu ra:

0, 1, 2, 3, 4,

Nhớ lại:

Note: The [for variable in range(int_1, int_2):] always prints till the variable is 1 less than it's limit. (1 less than int_2)

2 hữu ích 0 bình luận chia sẻ

answer

Ngô Phương Quyên · Ngô Phương Quyên 20:13 18/10/2014

for i in xrange(0,10): print '\b.',

Điều này hoạt động trong cả 2.7.8 và 2.5.2 (tương ứng với thiết bị đầu cuối Canopy và OSX) - không yêu cầu nhập mô-đun hoặc du hành thời gian.

1 hữu ích 4 bình luận chia sẻ

answer

Huỳnh Thiên Khuê · Huỳnh Thiên Khuê 04:01 17/05/2017

... bạn không cần nhập bất kỳ thư viện nào. Chỉ cần sử dụng ký tự xóa:

BS=u'\0008' # the unicode for "delete" character for i in range(10):print(BS+"."),

điều này sẽ xóa dòng mới và khoảng trắng (^ _ ^) *

-4 hữu ích 0 bình luận chia sẻ

Xem nguồn: https://stackoverflow.com/questions/493386/how-to-print-without-newline-or-space