سؤال

السؤال في العنوان.

أود أن أفعل ذلك في .ما أود أن أفعله في هذا المثال في :

شركة:

#include <stdio.h>

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

انتاج:

..........

في بايثون:

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

في بايثون print سوف تضيف أ \n أو الفضاء، كيف يمكنني تجنب ذلك؟الآن، إنه مجرد مثال.لا تقل لي أنه يمكنني أولاً إنشاء سلسلة ثم طباعتها.أود أن أعرف كيفية "إلحاق" السلاسل بـ stdout.

هل كانت مفيدة؟

المحلول

الطريقة العامة

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

قد تحتاج أيضًا إلى الاتصال

sys.stdout.flush()

ليضمن stdout يتم مسحه على الفور.

بايثون 2.6+

من Python 2.6 يمكنك استيراد ملف print وظيفة من بيثون 3:

from __future__ import print_function

يتيح لك هذا استخدام حل Python 3 أدناه.

بايثون 3

في بايثون 3، print تم تغيير البيان إلى وظيفة.في Python 3، يمكنك بدلاً من ذلك القيام بما يلي:

print('.', end='')

يعمل هذا أيضًا في Python 2، بشرط أن تكون قد استخدمته from __future__ import print_function.

إذا كنت تواجه مشكلة في التخزين المؤقت، يمكنك مسح الإخراج عن طريق الإضافة flush=True حجة الكلمة الرئيسية:

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

ومع ذلك، لاحظ أن flush الكلمة الأساسية غير متوفرة في إصدار print الدالة المستوردة من __future__ في بيثون 2؛إنه يعمل فقط في Python 3، وبشكل أكثر تحديدًا 3.3 والإصدارات الأحدث.في الإصدارات السابقة، ستظل بحاجة إلى التدفق يدويًا من خلال الاتصال بـ sys.stdout.flush().

مصادر

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print

نصائح أخرى

يجب أن تكون بسيطة كما هو موضح في هذا الرابط من قبل غيدو فان روسوم:

ورد: كيف طباعة واحدة دون ج / ص

http://legacy.python.org/search/hypermail/ الثعبان-1992 / 0115.html

<اقتباس فقرة>   

هل من الممكن طباعة شيء ولكن ليس لديهم تلقائيا   إرجاع إلحاق لذلك؟

نعم، إلحاق فاصلة بعد الوسيطة الأخيرة للطباعة. على سبيل المثال، هذه الحلقة بطباعة الأرقام 0..9 على خط مفصولة بمسافات. ملحوظة وparameterless "طباعة" يضيف السطر الأخير:

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

ملاحظة: "كيف لprintf في بيثون" عنوان هذا السؤال تستخدم ليكون شيء من هذا القبيل

ولأن الناس قد يأتون إلى هنا تبحث عن ذلك بناء على اللقب، بيثون كما تدعم الاستبدال على غرار 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

و، يمكنك مضاعفة بسهولة قيم السلسلة:

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

استخدم وظيفة الطباعة على غرار python3 لpython2.6 + <م> (كما كسر أي بيانات الطباعة keyworded الموجودة في نفس الملف.)

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

للا تدمر كل ما تبذلونه من الكلمات الرئيسية طباعة python2، إنشاء ملف printf.py منفصل

# printf.py

from __future__ import print_function

def printf(str, *args):
    print(str % args, end='')

وبعد ذلك، واستخدامها في الملف الخاص بك

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

ومزيد من الأمثلة التي تبين أسلوب printf

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

وكيفية طباعة على نفس السطر:

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

والجديد (اعتبارا من بيثون 3.0) وظيفة print لها المعلمة end الاختيارية التي تمكنك من تعديل الطابع تنتهي. هناك sep أيضا لالفاصل.

وعن طريق functools.partial لإنشاء وظيفة جديدة تسمى printf

>>> import functools

>>> printf = functools.partial(print, end="")

>>> printf("Hello world\n")
Hello world

وطريقة سهلة للالتفاف وظيفة مع المعلمات الافتراضية.

ويمكنك فقط إضافة , في النهاية وظيفة print لذلك لن الطباعة على سطر جديد.

ويمكنك محاولة:

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')

في بيثون 3، الطباعة وظيفة. عند استدعاء

print ('hello world')

وبيثون يترجم إلى

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

ويمكنك تغيير نهاية إلى ما تريد.

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

والثعبان على 2.6 + : ل

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

والثعبان على 3 : ل

print('.', end='')

والثعبان <= <قوية> 2.5 : ل

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

وإذا مساحة إضافية على ما يرام بعد كل طبعة، في بيثون 2

print '.',

على مضللة في الثعبان 2 - على تجنب : ل

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') `

ومؤخرا كان لي نفس المشكلة ..

وأنا حلها عن طريق القيام:

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)

وهذا يعمل على كل يونيكس ونوافذ ... لم نجرب ذلك على ماكوسكس ...

وهته

ويمكن أن تفعل الشيء نفسه في python3 كما يلي:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

ووتنفيذه مع python filename.py أو python3 filename.py

وستلاحظ أن جميع الإجابات أعلاه صحيحة. ولكن أردت أن أدلي اختصار لكتابة دائما "نهاية = ''" معلمة في نهاية المطاف.

هل يمكن تعريف دالة مثل

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

ووستقبل كل عدد من المعلمات. حتى انها ستقبل جميع معلمات أخرى مثل ملف، الاحمرار، وغيرها، والذي يحمل نفس الاسم.

وlenooh راض الاستعلام بلدي. اكتشفت هذه المادة أثناء البحث عن "الثعبان قمع السطر الجديد. أنا باستخدام IDLE3 على التوت بي لتطوير بيثون 3.2 لالمعجون. أردت أن تخلق شريط تقدم على سطر الأوامر المعجون. لم أكن أرغب في صفحة التمرير بعيدا. كنت أرغب في خط أفقي إلى إعادة طمأنة المستخدمين من ينقط إلى أن البرنامج لم cruncxed إلى توقف ولا تم إرسالها إلى تناول طعام الغداء يوم حلقة لا نهائية مرح - كما نداء إلى "ترك لي أن أكون، أنا بخير، ولكن هذا قد يستغرق بعض الوقت ". رسالة التفاعلية - مثل شريط تقدم في النص

ووprint('Skimming for', search_string, '\b! .001', end='') تهيئة الرسالة التحضير للالمقبل الشاشة والكتابة، التي ستطبع ثلاثة أزرار لإعادة الكتابة كما ⌫⌫⌫ rubout ثم فترة، ومحو قبالة '001' وتمديد خط من الفترات. بعد الببغاوات search_string إدخال المستخدم، و\b! الديكورات تعجب من بلدي النص search_string إلى الوراء عبر الفضاء التي print() خلاف ذلك القوات، ووضع صحيح علامات الترقيم. وهذا ما متبوعا بمسافة و "نقطة" الأولى من "شريط التقدم" الذي أنا محاكاة. دون داع، كما ثم تستعد الرسالة مع رقم الصفحة (منسق لمدة ثلاثة مع الأصفار البادئة) لتنتبه من المستخدم أن التقدم يتم معالجتها والتي ستعكس أيضا عدد من فترات سنبني في وقت لاحق ل الحق.

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')

واللحوم شريط التقدم في خط sys.stdout.write('\b\b\b.'+format(page, '03')). أولا، لمحو إلى اليسار، وتدعم المؤشر فوق أحرف رقمية الثلاثة مع '\ ب \ ب \ ب' كما ⌫⌫⌫ rubout ويسقط مرحلة جديدة إضافة إلى طول شريط التقدم. ثم فإنه يكتب ثلاثة أرقام من الصفحة أنه قد تقدم إلى حتى الآن. لأن sys.stdout.write() ينتظر عازلة الكامل أو قناة الإخراج إلى إغلاق أبوابها وsys.stdout.flush() يفرض على الكتابة فورا. بنيت sys.stdout.flush() في نهاية print() التي يتم تجاوز مع print(txt, end='' ). ثم رمز حلقات عبر عمليات مكثفة في الوقت الدنيوية في الوقت الذي يطبع شيء أكثر حتى يعود هنا إلى مسح ثلاثة أرقام الظهر، إضافة نقطة وإرسال ثلاثة أرقام أخرى، زيادة.

والأرقام الثلاثة محو وإعادة كتابة ليست بأي وسيلة ضرورية - انها مجرد ازدهار الذي يجسد sys.stdout.write() مقابل print(). هل يمكن أن مجرد منصب رئيس بسهولة مع فترة وننسى الهوى مائل-ب ⌫ أزرار لإعادة الكتابة الثلاث (الصفحة بالطبع لا الكتابة تنسيق تعول أيضا) فقط عن طريق طباعة شريط فترة أطول من جانب واحد في كل مرة من خلال - بدون مسافات أو أسطر جديدة باستخدام فقط الزوج sys.stdout.write('.'); sys.stdout.flush().

تجدر الإشارة إلى أن التوت بي IDLE3 بيثون قذيفة لا يكرم مسافة للخلف كما ⌫ rubout ولكن بدلا من ذلك يطبع الفضاء، وخلق قائمة واضحة الكسور بدلا من ذلك.

- (س = 8> الحذق

وكنت ترغب في طباعة شيء في لحلقة اليمين، ولكنك لا تريد أن الطباعة في خط جديد في كل مرة .. على سبيل المثال:

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

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

ولكن تريد أن طباعة مثل هذا: مرحبا مرحبا مرحبا مرحبا مرحبا مرحبا الحق ؟؟؟؟ فقط إضافة فاصلة بعد الطباعة "مرحبا"

مثال:

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

وكثير من هذه الإجابات تبدو معقدة قليلا. في بيثون 3.X ببساطة القيام بذلك،

print(<expr>, <expr>, ..., <expr>, end=" ")

والقيمة الافتراضية هي نهاية "\ ن". نحن ببساطة تغييره إلى الفضاء أو يمكنك أيضا استخدام نهاية = "".

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

وهذا يعمل في كل من 2.7.8 و 2.5.2 (محطة الستارة وOSX، على التوالي) - لا واردات وحدة أو الوقت الذي يستغرقه السفر يتطلب

.

وأو لها وظيفة مثل:

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

وبعد ذلك الآن:

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

والمخرجات:

0123456789

هناك طريقتان عامتان للقيام بذلك:

الطباعة بدون سطر جديد في Python 3.x

لا تقم بإلحاق أي شيء بعد عبارة الطباعة وقم بإزالة ' ' باستخدام end='' مثل:

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

مثال آخر في الحلقة:

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

الطباعة بدون سطر جديد في Python 2.x

إضافة فاصلة زائدة تقول أنه بعد تجاهل الطباعة \n.

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

مثال آخر في الحلقة:

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

ارجوا ان يساعدك هذا.يمكنك زيارة هذا وصلة .

... لا تحتاج لاستيراد أي مكتبة. مجرد استخدام حرف الحذف:

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

وهذا يزيل السطر الجديد والفضاء (^ _ ^) *

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top