Вывод текста в python с помощью print()

Method 3: Explicitly print to the file

We can directly specify the file to be printed in the call to , by mentioning the file keyword argument.

For example, the below snippet prints to the file .

print('Hi', file=open('output.txt', 'a'))
print('Hello from AskPython', file=open('output.txt', 'a'))
print('exit', file=open('output.txt', 'a'))

The file now has the three lines appended to it, and we have successfully printed to !

Using a context manager

However, this method isn’t the best way to resolve this situation, due to the repeated calls to on the same file. This wastes time, and we can do better!

The better way would be to explicitly use a context manager statement, which takes care of automatically closing the file and using the file object directly.

with open("output.txt", "a") as f:
    print('Hi', file=f)
    print('Hello from AskPython', file=f)
    print('exit', file=f)

This gives the same result as before, appending the three lines to , but is now much faster, since we don’t open the same file again and again.

Basic print command examples

print something

Where something is an item or expression of any data type. We can print some data types directly, but most of that can be printed out by the print statement in a straightforward way.

Following are the few examples of print command you can use in your program to write anything on the console or terminal window.

Example1: Printing strings in python

>>> print "Jhon"
Jhon
>>> print "Jhon Kennedy"
Jhon Kennedy
>>> print "Hi, I am Python."
Hi, I am Python.

Above examples shows simple print string or a sentence which enclosed within double-quote marks.

Example2: Printing numbers in python. When playing with a number, we can do simple mathematical with a print statement as shown below. 

>>> print 25
25
>>> print 2*2
4
>>> print 2 + 5 + 9
16

Above examples shows print integer including simple math functions.

Функция filter

Следующая
аналогичная функция – это filter. Само ее название говорит, что
она возвращает элементы, для которых, переданная ей функция возвращает True:

filter(func, *iterables)

Предположим, у
нас есть список

a=1,2,3,4,5,6,7,8,9,10

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

def odd(x):
    return x%2

И далее, вызов
функции filter:

b = filter(odd, a)
print(b)

На выходе
получаем итератор, который можно перебрать так:

print( next(b) )
print( next(b) )
print( next(b) )
print( next(b) )

Или, с помощью
цикла:

for x in b:
    print(x, end=" ")

Или же
преобразовать итератор в список:

b = list(filter(odd, a))
print(b)

Конечно, в
качестве функции здесь можно указывать лямбда-функцию и в нашем случае ее можно
записать так:

b = list(filter(lambda x: x%2, a))

И это бывает гораздо
удобнее, чем объявлять новую функцию.

Функцию filter можно применять
с любыми типами данных, например, строками. Пусть у нас имеется вот такой
кортеж:

lst = ("Москва", "Рязань1", "Смоленск", "Тверь2", "Томск")
b = filter(str.isalpha, lst)
 
for x in b:
    print(x, end=" ")

и мы вызываем
метод строк isalpha, который
возвращает True, если в строке
только буквенные символы. В результате в консоли увидим:

Москва Смоленск
Тверь Томск

Операции над строками

Прежде чем перейти к функциям для работы со строками, следует рассмотреть основные операции с ними, которые позволяют быстро преобразовывать любые последовательности символов. При помощи знака плюс можно производить конкатенацию строк, соединяя их вместе. В следующем примере продемонстрировано объединение this is new и text.

Пользуясь символом умножения, программист получает возможность дублировать строку любое количество раз. В данном коде слово text записывается в новую строку трижды.

Как и в случае с числами, со строками можно использовать операторы сравнения, например двойное равно. Очевидно, что литералы some text и some new text разные, поэтому вызов метода print выводит на экран булево значение False для строк string и newString.

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

Вводная информация о строках

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

Литералы строк

Литерал – способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:

Если внутри строки необходимо расположить двойные кавычки, и сама строка была создана с помощью двойных кавычек, можно сделать следующее:

Разницы между строками с одинарными и двойными кавычками нет – это одно и то же

Какие кавычки использовать – решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек – обратная косая черта в строке ухудшает читаемость кода.

Кодировка строк

В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.

В Python 3 кодировка по умолчанию исходного кода – UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:

Максимальная длина строки в Python

Максимальная длина строки зависит от платформы. Обычно это:

  • 2**31 — 1 – для 32-битной платформы;
  • 2**63 — 1 – для 64-битной платформы;

Константа , определенная в модуле

Конкатенация строк

Одна из самых распространенных операций со строками – их объединение (конкатенация). Для этого используется знак , в результате к концу первой строки будет дописана вторая:

При необходимости объединения строки с числом его предварительно нужно привести тоже к строке, используя функцию

Сравнение строк

При сравнении нескольких строк рассматриваются отдельные символы и их регистр:

  • цифра условно меньше, чем любая буква из алфавита;
  • алфавитная буква в верхнем регистре меньше, чем буква в нижнем регистре;
  • чем раньше буква в алфавите, тем она меньше;

При этом сравниваются по очереди первые символы, затем – 2-е и так далее.

Далеко не всегда желательной является зависимость от регистра, в таком случае можно привести обе строки к одному и тому же регистру. Для этого используются функции – для приведения к нижнему и – к верхнему:

Как удалить строку в Python

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

Или перезаписать переменную пустой строкой:

Обращение по индексу

Для выбора определенного символа из строки можно воспользоваться обращением по индексу, записав его в квадратных скобках:

Индекс начинается с 0

В Python предусмотрена возможность получить доступ и по отрицательному индексу. В таком случае отсчет будет вестись от конца строки:

Кодировка

Чтобы задать необходимую кодировку для используемых в строках символов в Python достаточно поместить соответствующую инструкцию в начало файла с кодом, как это было сделано в следующем примере, где используется utf-8. С помощью префикса u, который стоит перед литералом, можно помечать его соответствующей кодировкой. В то же время префикс b применяется для литералов строк с элементами величиной в один байт.

Производить кодирование и декодирование отдельных строк с заданной кодировкой позволяют встроенные методы decode и encode. Аргументом для них является название кодировки, как в следующем примере кода, где применяется наименование utf-8.

Method 4: Use the logging module

We can use Python’s logging module to print to the file. This is preferred over Method 2, where explicitly changing the file streams is not be the most optimal solution.

import logging

# Create the file
# and output every level since 'DEBUG' is used
# and remove all headers in the output
# using empty format=''
logging.basicConfig(filename='output.txt', level=logging.DEBUG, format='')

logging.debug('Hi')
logging.info('Hello from AskPython')
logging.warning('exit')

This will, by default, append the three lines to . We have thus printed to the file using , which is one of the recommended ways of printing to a file.

Задания для самоподготовки

1. Поставить в
соответствие следующим английским символам русские буквы:

h – х, e – е, l – л, o – о, w – в, r – р, d – д

и преобразовать строку «hello world!» в русские символы.

2. Дан текст:

t = «»»Куда ты скачешь
гордый конь,

И
где опустишь ты копыта?

О
мощный властелин судьбы!

Не
так ли ты над самой бездной,

На высоте, уздой железной

Россию
поднял на дыбы?»»»

Необходимо
выделить каждое второе слово из этого стихотворения и представить результат в
виде упорядоченного списка. (Подумайте как реализовать алгоритм с наименьшими
затратами по памяти).

3. Реализовать
алгоритм для нахождения всех делителей натурального числа N. Число N вводится с
клавиатуры. Для начала можно реализовать простым перебором всех N возможных чисел
(делителей). Затем, подумайте, как можно оптимизировать по скорости этот
алгоритм.

Видео по теме

Python 3 #1: установка и запуск интерпретатора языка

Python 3 #2: переменные, оператор присваивания, типы данных

Python 3 #3: функции input и print ввода/вывода

Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень

Python 3 #5: условный оператор if, составные условия с and, or, not

Python 3 #6: операторы циклов while и for, операторы break и continue

Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in

Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие

Python 3 #9: списки list и функции len, min, max, sum, sorted

Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear

Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора

Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop

Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index

Python 3 #14: функции (def) — объявление и вызов

Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»

Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов

Python 3 #17: алгоритм Евклида, принцип тестирования программ

Python 3 #18: области видимости переменных — global, nonlocal

Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение

Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield

Python 3 #21: функции map, filter, zip

Python 3 #22: сортировка sort() и sorted(), сортировка по ключам

Python 3 #23: обработка исключений: try, except, finally, else

Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle

Python 3 #25: форматирование строк: метод format и F-строки

Python 3 #26: создание и импорт модулей — import, from, as, dir, reload

Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)

Python 3 #28: декораторы функций и замыкания

Python 3 #29: установка и порядок работы в PyCharm

Python 3 #30: функция enumerate, примеры использования

Common Stumbling Blocks¶

This section lists those few changes that are most likely to trip you
up if you’re used to Python 2.5.

Print Is A Function

The statement has been replaced with a
function, with keyword arguments to replace most of the special syntax
of the old statement (PEP 3105). Examples:

Old print "The answer is", 2*2
New print("The answer is", 2*2)

Old print x,           # Trailing comma suppresses newline
New print(x, end=" ")  # Appends a space instead of a newline

Old print              # Prints a newline
New print()            # You must call the function!

Old print >>sys.stderr, "fatal error"
New print("fatal error", file=sys.stderr)

Old print (x, y)       # prints repr((x, y))
New print((x, y))      # Not the same as print(x, y)!

You can also customize the separator between items, e.g.:

print("There are <", 2**32, "> possibilities!", sep="")

which produces:

There are <4294967296> possibilities!

Note:

  • The function doesn’t support the “softspace” feature of
    the old statement. For example, in Python 2.x,
    would write ; but in Python 3.0,
    writes .

  • Initially, you’ll be finding yourself typing the old
    a lot in interactive mode. Time to retrain your fingers to type
    instead!

  • When using the source-to-source conversion tool, all
    statements are automatically converted to
    function calls, so this is mostly a non-issue for
    larger projects.

Views And Iterators Instead Of Lists

Some well-known APIs no longer return lists:

  • methods , and
    return “views” instead of lists. For example,
    this no longer works: . Use instead (this works in Python 2.5 too and is just
    as efficient).

  • Also, the , and
    methods are no longer supported.

  • and return iterators. If you really need
    a list and the input sequences are all of equal length, a quick
    fix is to wrap in , e.g. ,
    but a better fix is
    often to use a list comprehension (especially when the original code
    uses ), or rewriting the code so it doesn’t need a
    list at all. Particularly tricky is invoked for the
    side effects of the function; the correct transformation is to use a
    regular loop (since creating a list would just be
    wasteful).

    If the input sequences are not of equal length, will
    stop at the termination of the shortest of the sequences. For full
    compatibility with from Python 2.x, also wrap the sequences in
    , e.g. becomes
    .

  • now behaves like used to behave, except
    it works with values of arbitrary size. The latter no longer
    exists.

  • now returns an iterator.

Ordering Comparisons

Python 3.0 has simplified the rules for ordering comparisons:

  • The ordering comparison operators (, , , )
    raise a TypeError exception when the operands don’t have a
    meaningful natural ordering. Thus, expressions like , or are no longer valid, and e.g. raises instead of returning
    . A corollary is that sorting a heterogeneous list
    no longer makes sense – all the elements must be comparable to each
    other. Note that this does not apply to the and
    operators: objects of different incomparable types always compare
    unequal to each other.

  • and no longer accept the
    cmp argument providing a comparison function. Use the key
    argument instead. N.B. the key and reverse arguments are now
    “keyword-only”.

  • The function should be treated as gone, and the
    special method is no longer supported. Use for sorting,
    with , and other rich comparisons as needed.
    (If you really need the functionality, you could use the
    expression as the equivalent for .)

Integers

  • PEP 237: Essentially, renamed to .
    That is, there is only one built-in integral type, named
    ; but it behaves mostly like the old type.

  • PEP 238: An expression like returns a float. Use
    to get the truncating behavior. (The latter syntax has
    existed for years, at least since Python 2.2.)

  • The constant was removed, since there is no
    longer a limit to the value of integers. However,
    can be used as an integer larger than any practical list or string
    index. It conforms to the implementation’s “natural” integer size
    and is typically the same as in previous releases
    on the same platform (assuming the same build options).

  • The of a long integer doesn’t include the trailing
    anymore, so code that unconditionally strips that character will
    chop off the last digit instead. (Use instead.)

  • Octal literals are no longer of the form ; use
    instead.

Запуск

Поток запускается путем вызова метода модуля передачи объекта Thread.

t1.start()

Он должен вызываться не более одного раза для каждого объекта потока. Он организует вызов метода объекта в отдельном потоке управления.

Этот метод вызовет если будет вызван более одного раза для одного и того же объекта потока.

Поток вызывается в программе, которая сама по себе является процессом. Таким образом, во время выполнения потока основная программа также продолжает свое выполнение.

Следовательно, мы можем приостановить деятельность основной программы (выполняемой основным потоком) до завершения созданного потока.

Method 2: Redirect sys.stdout to the file

Usually, when we use the print function, the output gets displayed to the console.

But, since the standard output stream is also a handler to a file object, we can route the standard output to point to the destination file instead.

The below code is taken from our previous article on stdin, stdout and stderr. This redirects the to the file.

import sys
 
# Save the current stdout so that we can revert sys.stdou after we complete
# our redirection
stdout_fileno = sys.stdout
 
sample_input = 
 
# Redirect sys.stdout to the file
sys.stdout = open('output.txt', 'w')
 
for ip in sample_input:
    # Prints to the redirected stdout (Output.txt)
    sys.stdout.write(ip + '\n')
    # Prints to the actual saved stdout handler
    stdout_fileno.write(ip + '\n')
 
# Close the file
sys.stdout.close()
# Restore sys.stdout to our old saved file handler
sys.stdout = stdout_fileno

Output (Assume that is a newly created file)

vijay@AskPython:~# python output_redirection.py
Hi
Hello from AskPython
exit
root@ubuntu:~# cat output.txt
Hi
Hello from AskPython
exit

OrderedDict objects¶

Ordered dictionaries are just like regular dictionaries but have some extra
capabilities relating to ordering operations. They have become less
important now that the built-in class gained the ability
to remember insertion order (this new behavior became guaranteed in
Python 3.7).

Some differences from still remain:

  • The regular was designed to be very good at mapping
    operations. Tracking insertion order was secondary.

  • The was designed to be good at reordering operations.
    Space efficiency, iteration speed, and the performance of update
    operations were secondary.

  • Algorithmically, can handle frequent reordering
    operations better than . This makes it suitable for tracking
    recent accesses (for example in an LRU cache).

  • The equality operation for checks for matching order.

  • The method of has a different
    signature. It accepts an optional argument to specify which item is popped.

  • has a method to
    efficiently reposition an element to an endpoint.

  • Until Python 3.8, lacked a method.

class (items)

Return an instance of a subclass that has methods
specialized for rearranging dictionary order.

New in version 3.1.

(last=True)

The method for ordered dictionaries returns and removes a
(key, value) pair. The pairs are returned in
LIFO order if last is true
or FIFO order if false.

(key, last=True)

Move an existing key to either end of an ordered dictionary. The item
is moved to the right end if last is true (the default) or to the
beginning if last is false. Raises if the key does
not exist:

>>> d = OrderedDict.fromkeys('abcde')
>>> d.move_to_end('b')
>>> ''.join(d.keys())
'acdeb'
>>> d.move_to_end('b', last=False)
>>> ''.join(d.keys())
'bacde'

New in version 3.2.

In addition to the usual mapping methods, ordered dictionaries also support
reverse iteration using .

Equality tests between objects are order-sensitive
and are implemented as .
Equality tests between objects and other
objects are order-insensitive like regular
dictionaries. This allows objects to be substituted
anywhere a regular dictionary is used.

Changed in version 3.5: The items, keys, and values
of now support reverse iteration using .

Changed in version 3.6: With the acceptance of PEP 468, order is retained for keyword arguments
passed to the constructor and its
method.

Changed in version 3.9: Added merge () and update () operators, specified in PEP 584.

Форматирование

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

В приведенном ниже фрагменте кода демонстрируется использование форматирования для вывода строки с выравниванием по правому краю (общая длина символов указана как 10).

Данная таблица содержит в себе все управляющие символы для форматирования строк в Python, каждый из которых обозначает определенный объект: числовой либо же символьный.

Символ Назначение
%d, %i, %u Число в 10-ричной системе исчисления
%x, %X Число в 16-ричной системе исчисления с буквами в нижнем и верхнем регистре
%o Число в 8-ричной системе исчисления
%f, %F Число с плавающей точкой
%e, %E Число с плавающей точкой и экспонентой в нижнем и верхнем регистре
%c Одиночный символ
%s, %r Строка из литерала и обычная
%% Символ процента

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

В следующем примере показано как можно отцентрировать строку, воспользовавшись методом format и специальными символами. Изначальный текст здесь перемещается в самый центр строки, в то время как пустое пространство заполняется символом *.

Следующая таблица отображает специальные символы для выравнивания строк и вывода чисел с необходимым форматом знаков для положительных и отрицательных объектов.

Символ Назначение
‘ ’ Выравнивание строки по правому краю с символами-заполнителями слева
‘=’ Выравнивание с символами-заполнителями после знака числа, но перед его цифрами
‘^’ Выравнивание строки по центру с символами-заполнителями с обеих сторон
‘+’ Применение знака для любых чисел
‘-‘ Применение знака для отрицательных чисел и ничего для положительных
‘ ‘ Применение знака для отрицательных чисел и пробела для положительных

#2 Форматирование строк “По новому” (str.format)

Python 3 предоставил новый способ форматирования, который также был внесен в раннюю версию Python 2.7. Этот “новый стиль” форматирования строк избавляется от специального синтаксиса оператора % и делает синтаксис для форматирования строк более регулярным. Теперь форматирование обрабатывается вызовом .format() в объекте строки.

Вы можете использовать format(), чтобы выполнить простое позиционное форматирование, также, как мы делали это по старинке:

Python

print(‘Hello, {}’.format(name))
# Вывод: ‘Hello, Bob’

1
2

print(‘Hello, {}’.format(name))

# Вывод: ‘Hello, Bob’

Или, вы можете сослаться на свои подстановки переменных по имени, и использовать их в том порядке, в котором вам хочется. Это достаточно мощный способ, так как он позволяет повторно упорядочить порядок отображения без изменения переданных функции format() аргументов:

Python

print(
‘Hey {name}, there is a 0x{errno:x} error!’.format(
name=name, errno=errno
)
)

# Вывод: ‘Hey Bob, there is a 0xbadc0ffee error!’

1
2
3
4
5
6
7

print(

‘Hey {name}, there is a 0x{errno:x} error!’.format(

name=name,errno=errno

)

)
 
# Вывод: ‘Hey Bob, there is a 0xbadc0ffee error!’

Однако, официальная документация Python 3 не делает явных рекомендаций по использованию старого форматирования:

По этому я лично пытаюсь работать str.format при продвижении нового кода. Начав с Python 3.6, есть еще один способ форматирования ваших строк. Рассмотрим его в следующем разделе!

Library Changes¶

Due to time constraints, this document does not exhaustively cover the
very extensive changes to the standard library. PEP 3108 is the
reference for the major changes to the library. Here’s a capsule
review:

  • Many old modules were removed. Some, like (no
    longer used) and (replaced by ), were
    already deprecated by PEP 4. Others were removed as a result
    of the removal of support for various platforms such as Irix, BeOS
    and Mac OS 9 (see PEP 11). Some modules were also selected for
    removal in Python 3.0 due to lack of use or because a better
    replacement exists. See PEP 3108 for an exhaustive list.

  • The package was removed because its presence in the
    core standard library has proved over time to be a particular burden
    for the core developers due to testing instability and Berkeley DB’s
    release schedule. However, the package is alive and well,
    externally maintained at https://www.jcea.es/programacion/pybsddb.htm.

  • Some modules were renamed because their old name disobeyed
    PEP 8, or for various other reasons. Here’s the list:

    Old Name

    New Name

    _winreg

    winreg

    ConfigParser

    configparser

    copy_reg

    copyreg

    Queue

    queue

    SocketServer

    socketserver

    markupbase

    _markupbase

    repr

    reprlib

    test.test_support

    test.support

  • A common pattern in Python 2.x is to have one version of a module
    implemented in pure Python, with an optional accelerated version
    implemented as a C extension; for example, and
    . This places the burden of importing the accelerated
    version and falling back on the pure Python version on each user of
    these modules. In Python 3.0, the accelerated versions are
    considered implementation details of the pure Python versions.
    Users should always import the standard version, which attempts to
    import the accelerated version and falls back to the pure Python
    version. The / pair received this
    treatment. The module is on the list for 3.1. The
    module has been turned into a class in the
    module.

  • Some related modules have been grouped into packages, and usually
    the submodule names have been simplified. The resulting new
    packages are:

    • (, , ,
      , , ).

    • (, ).

    • (, ,
      , , ,
      ).

    • (all -related modules except
      ). The target audience of doesn’t
      really care about . Also note that as of Python
      2.6, the functionality of has been greatly enhanced.

    • (, , ,
      ).

    • (, ,
      ).

Some other changes to standard library modules, not covered by
PEP 3108:

Вывод значений переменных с помощью print()

При выводе строки, содержащей присвоенное переменной значение, достаточно указать через запятую нужный идентификатор (имя переменной). Тип переменной указывать не следует, поскольку print преобразует данные любого типа в строки.Приведем пример:

a = 0

b = ‘Python from scratch’

print(a,’– число, а‘,b,’– строка.’)

0 – число, а Python from scratch – строка.

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

a = 0

b = ‘Python from scratch’

print(‘{0} является числом, а {1} – строкой.’.format(a,b))

0 является числом, а Python from scratch – строкой.

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

  • заполнитель %d применяют для числовых данных;
  • заполнитель %s – для строк.

a = 0

b = ‘Python from scratch’

print(‘%d является числом, а %s – строкой.’%(a,b))

0 является числом, а Python from scratch – строкой.

Если вместо заполнителя для целых чисел %d указать %s, функция print преобразует число в строку, и код сработает правильно. Но при замене %s на %d будет выведено сообщение об ошибке, поскольку обратная конвертация не осуществляется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector