为了有用,程序通常需要通过从用户那里获取输入数据并将结果数据显示给用户来与外部世界进行通信。本教程将介绍Python输入和输出。
输入可以通过键盘直接来自用户,也可以来自某些外部来源,如文件或数据库。输出可以直接显示到控制台或IDE,也可以通过图形用户界面(GUI)显示到屏幕,或者再次显示到外部源。
关注,转发,私信小编“01”即可免费领取Python学习资料!
在本入门系列的上一篇教程中,您将:
- 看到了编程语言用于实现确定性迭代的几种不同范例的比较
- 学习了迭代器和迭代器,这两个概念构成了Python中确定迭代的基础。
- 把这些联系在一起学习Python的for循环
在本教程结束时,您将了解如何:
- 使用内置功能从键盘获取用户输入。 input()
- 将输出显示到具有内置功能的控制台。 print()
- 将字符串数据格式化为字符串模算子
别再费劲了,让我们跳进去吧!
免费奖励:点击这里获得Python欺骗表,并学习Python 3的基础知识,比如使用数据类型、字典、列表和Python函数。
从键盘读取输入
程序通常需要从用户那里获取数据,通常是通过键盘输入。在Python中实现这一目标的最简单方法是使用input() .
input([])
Reads a line of input from the keyboard.
input()暂停程序执行以允许用户从键盘输入一行输入。一旦用户按下 进入 键,键入的所有字符都以字符串的形式读取和返回:
>>>
>>> s = input()foo bar baz>>> s'foo bar baz'
注意,当用户按下 进入 键不作为返回字符串的一部分包括在内。
如果包括可选的争论,input()在暂停读取输入之前,将其显示为对用户的提示:
>>>
>>> name = input('What is your name? ')What is your name? Winston Smith>>> name'Winston Smith'
input()总是返回字符串。如果希望使用数字类型,则需要将字符串转换为适当的类型。int() , float(),或complex()内置功能:
>>>
在上面的示例中,表达式n + 100在第3行上无效,因为n是一个字符串100是个整数。第8行转换n转换为整数,因此print()第10行的语句成功。
PythonVersionNote:如果您发现自己正在使用Python2.x代码,您可能会发现PythonVersion 2和3之间的输入函数略有不同。
raw_input()在Python 2中,从键盘读取输入并返回它。raw_input()在Python 2中,行为就像input()在Python 3中,如上文所述。
但是Python 2也有一个名为input()..在Python 2中,input()从键盘读取输入,将其解析并计算为Python表达式。,然后返回结果值。
Python 3没有提供与Python 2完全相同的功能。input()的确如此。这个效果可以在Python 3中用表达式来模拟。eval(input())..但是,这被认为是一种安全风险,因为它允许用户运行任意的、潜在的恶意代码。
见Python文档的更多信息eval(),以及维基百科eval页来讨论潜在的安全风险。
将输出写入控制台
除了从用户那里获取数据外,程序通常还需要将数据返回给用户。您可以用Python将程序数据显示到控制台print() .
未格式化控制台输出
若要将对象显示到控制台,请将它们作为逗号分隔的参数列表传递给print() .
print(, ..., )
显示每个到控制台去。
默认情况下,print()用单个空格分隔每个对象,并在输出的末尾追加一条换行符:
>>>
任何类型的对象都可以指定为print()..如果对象不是字符串,那么print()将其转换为显示它的适当字符串表示形式:
如您所见,即使是复杂的类型,如列表、字典和函数,也可以通过print() .
关键字参数print()
print()采取一些额外的参数,这些参数对输出的格式提供了适度的控制。每个参数都是一种特殊类型的参数,称为关键词参数..本系列教程将包括关于函数和参数传递的教程,以便您了解更多关于关键字参数的内容。
现在,你需要知道的是:
=print()
在下面的部分中,您将看到这些关键字参数如何影响由print() .
这个sep=关键词参数
添加关键字参数sep=使对象被字符串分隔。而不是默认的单个空格:
>>>
若要将对象压缩到一起,其中不存在任何空格,请指定sep='' :
>>>
>>> print('foo', 42, 'bar', sep='')foo42bar
可以将任意字符串指定为分隔符。sep=关键词。
这个end=关键词参数
关键字参数end=使输出终止于而不是默认的换行符:
>>>
>>> if True:... print('foo', end='/')... print(42, end='/')... print('bar')...foo/42/bar
例如,如果要在循环中显示值,则可以使用end=使值显示在一行上,而不是在单个行上:
>>>
可以将任何字符串指定为输出终止符。end=关键词。
输出流关键字参数
print()接受两个额外的关键字参数,这两个参数都会影响输出流的处理:
- file=*默认情况下,print()将其输出发送到名为sys.stdout,这通常等同于控制台。这个file=参数使输出被发送到由相反。
- flush=True*通常,print()缓冲其输出,并且只间歇地写入输出流。flush=True指定每个输出流强制刷新。print() .
为了完整起见,这里提供了这两个关键字参数。在这一点上,您可能不需要太担心输出流。这些内容将在本系列后面的文件I/O教程中进行讨论。
格式化字符串输出
print()支持最基本的控制台输出的格式设置。您可以选择如何分离打印对象,还可以指定打印行末尾的内容。事情就是这样。
在许多情况下,您需要更精确地控制要显示的数据的外观。Python提供了几种格式化输出字符串数据的方法。在本节中,您将了解其中一个老版本:字符串模算子 .
在Python的最新版本中,有一些较新的方法来格式化字符串数据,这些方法可以说优于String模运算符:弦.format()方法,和F-字符串..您将在本系列的下一篇教程中了解这些内容。您还可以查看以下文章:
- Python字符串格式提示&最佳实践
- Python 3的f-字符串:一种改进的字符串格式语法(指南)
尽管还有其他格式设置选项可用,但字符串模运算符仍然被广泛使用。如果您正在阅读现有的Python代码,您可能会遇到StringModo操作符,因此熟悉它将是有益的。
注意:如果你熟悉 printf() C、Perl或Java的一系列函数,然后您将看到这些函数在Python中并不存在。然而,两者之间有相当大的相似之处。printf()以及字符串模运算符,所以如果您熟悉printf(),那么下面的许多内容都会让人感到眼熟。
另一方面,如果你不熟悉printf()那就别担心!以下几点仍然是有意义的。
字符串模算子
Themodulo算子(%)通常与数字连用,在这种情况下,它从除法中计算余数:
>>>
>>> 11 % 32
对于字符串操作数,模运算符有一个完全不同的函数:String格式化。)这两种操作实际上并不十分相似。它们同名,因为它们用相同的符号表示:% .)
以下是字符串模运算符的语法:
%
的左边%接线员,包含一个或多个转换说明符的字符串。这个在右边插入代替转换说明符。得到的格式化字符串是表达式的值。
让我们从一个例子开始。这是一个print()语句,该语句使用字符串模运算符显示格式化字符串:
>>>
>>> print('%d %s cost $%.2f' % (6, 'bananas', 1.74))6 bananas cost $1.74
除了表示字符串模块操作本身之外,'%'字符还表示格式字符串中的转换说明符-在本例中,'%d' , '%s',和'%.2f' .
在输出中,值元组中的每个项被转换为字符串值,并插入到格式字符串中以代替相应的转换说明符:
- 元组中的第一项是6,替换'%d'在格式字符串中。
- 下一项是字符串值。'bananas',它取代了'%s' .
- 最后一项是浮点值。1.74,它取代了'%.2f' .
得到的字符串是6 bananas cost $1.74,如下图所示:
字符串模算子
如果有多个值要插入,那么它们必须用一个元组括起来,如上面所示。如果只有一个值,那么它可以单独显示:
>>>
>>> print('Hello, my name is %s.' % 'Graham')Hello, my name is Graham.
还请注意,字符串模块操作不只是用于打印。还可以格式化值并将它们赋值给另一个字符串变量:
>>>
>>> s = 'Hello, my name is %s.' % 'Graham'>>> s'Hello, my name is Graham.'
(同样,如果您熟悉与printf(),这让人想起sprintf()..如果你不是,那就别担心。)
转换说明符
转换说明符出现在并确定值插入时是如何格式化的。
转换说明符以%由以下组成部分组成:
%[][][.]
%和都是必需的。方括号中显示的其余组件是可选的。
下表总结了转换说明符的每个组件所做的工作:
要了解更多关于这些操作的细节,请继续阅读。
转换类型
转换类型,,是转换说明符的最后一个组件:
%[][][.]
它确定相应值在插入格式字符串之前所经历的转换类型。下面的表列出了可能的转换类型:
在下面的部分中,您将看到如何使用这些转换类型。
整数转换类型
这个d , i , u , x , X,和o转换类型对应于整数值。
d , i,和u在功能上是等价的。它们都将相应的参数转换为十进制整数的字符串表示形式:
值可以是正的,也可以是负的。如果为负值,则结果值将以'-'性格。
x和X转换为十六进制整数值的字符串表示形式,以及o转换为八进制整数值的字符串表示形式:
>>>
>>> '%x, %X' % (252, 252)'fc, FC'>>> '%o' % 16'20'
x生成小写输出,以及X产生大写字母。(大写)'O'不是有效的转换类型。)
您可以通过以下方法获得对结果格式的额外控制转换标志,您将在下一节中了解更多相关信息。
浮点转换类型
转换类型f和F转换为浮点数的字符串表示形式,而e和E生成一个表示指数(科学)表示法的字符串:
>>>
>>> '%f, %F' % (3.14159, 3.14)'3.141590, 3.140000'>>> '%e, %E' % (1000.0, 1000.0)'1.000000e+03, 1.000000E+03'
e生成小写输出,以及E产生大写字母。
深潜:inf和NaN
在某些情况下,浮点运算可能导致一个实质上是无限的值.在Python中,这样一个数字的字符串表示形式是'inf' .
浮点操作也可能产生一个不能表示为数字的值。Python用字符串表示这个'NaN' .
当使用字符串模运算符转换这些值时,转换类型字符控制结果输出的情况。f和e产生小写输出,同时F和E生产大写:
>>>
>>> x = float('NaN')>>> '%f, %e, %F, %E' % (x, x, x, x)'nan, nan, NAN, NAN'>>> y = float('Inf')>>> '%f, %e, %F, %E' % (y, y, y, y)'inf, inf, INF, INF'
这是f和F转换类型。
这个g和G转换类型在浮点输出还是指数输出之间进行选择,取决于指数的大小和指定的值...(见下文)输出与e / E如果指数小于-4或不少于...否则,这和f / F :
>>>
>>> '%g' % 3.14'3.14'>>> '%g' % 0.00000003'3e-08'>>> '%G' % 0.00000003'3E-08'
基本上,您可以将这些转换类型看作是“合理”的选择。如果所讨论的值合理地适用于浮点输出,它们将产生浮点输出,而指数格式则会产生浮点输出。
类似于其他浮点转换类型,g生成小写输出,以及G产生大写字母。
字符转换类型
c插入一个字符。对应的值可以是整数,也可以是单字符串:
>>>
>>> '%c' % 97'a'>>> '[%c]' % 'y''[y]'
这个c转换类型也支持转换为Unicode字符:
>>>
>>> '%c' % 8721'∑'
s , r,和a使用内置函数生成字符串输出。 str() , repr() ,和 ascii() 分别:
>>>
>>> '%s' % 'foo''foo'>>> '%r' % 'foo'"'foo'">>> '%a' % 'foo'"'foo'"
字符串输出的调整和填充可以通过和.说明符,您很快就会看到。
插入'%'字
插入文字'%'将字符输入输出,指定两个连续字符。%格式字符串中的字符。第一种方法引入一个转换说明符(与往常一样),第二种类型指定转换类型为%,这导致了一个单一的'%'输出中的字符。
在这个例子中,%d%%表示十进制整数转换类型,后面跟着文字。'%'性格:
>>>
>>> 'Get %d%% off on %s today only!' % (30, 'bananas')'Get 30% off on bananas today only!'
注意,%转换类型不使用任何在字符串模运算符的右边。
宽度和精度说明
和.坐在转换说明符的中间:
%[] [][.]
它们决定格式化的值占用多少水平空间。
这个说明符
指定输出字段的最小宽度。如果输出小于,则在默认情况下,它在以下字段中是正确的:字符宽,并在左侧填充ASCII空格字符:
>>>
>>> '%5s' % 'foo'' foo'>>> '%3d' % 4' 4'
(理由和填充字符可以修改。看见转换标志)
如果输出长度大于,然后无效:
>>>
>>> '%2d' % 1234, '%d' % 1234('1234', '1234')>>> '%2s' % 'foobar', '%s' % 'foobar'('foobar', 'foobar')
这些示例中的每一个都指定字段宽度为2..但是,由于要格式化的值超过两个字符,所以结果与被指定。
这个.说明符
.影响浮点、指数和字符串转换类型。
为f , F , e,和E类型,.确定小数点之后的数字数:
>>>
>>> '%.2f' % 123.456789'123.46'>>> '%.2e' % 123.456789'1.23e+02'
为g和G类型,.确定小数点前后的有效数字总数:
>>>
>>> '%.2g' % 123.456789'1.2e+02'
属性格式化的字符串值。s , r,和a类型被截断为. :
>>>
>>> '%.4s' % 'foobar''foob'
这是很常见的和.一起使用:
>>>
>>> '%8.2f' % 123.45678' 123.46'>>> '%8.3s' % 'foobar'' foo'
任一或.可以指定为星号字符(*),在这种情况下,要使用的值将从元组:
>>>
>>> '%*d' % (5, 123)' 123'
当值作为常数给出。上面给出的示例与以下示例之间没有任何功能上的区别:
>>>
>>> '%5d' % 123' 123'
但您也可以指定和.按变量分列:
>>>
>>> for i in range(3):... w = int(input('Enter width: '))... print('[%*s]' % (w, 'foo'))...Enter width: 2[foo]Enter width: 4[ foo]Enter width: 8[ foo]
这允许在运行时确定宽度或精度,并可能从一次执行更改到下一次执行。
转换旗
可选转换在初始值之后指定。%性格:
% [] [][.]
这样可以更好地控制某些转换类型的显示。可以包括下表所示的任何字符:
下面的部分将更详细地解释转换标志的工作方式。
这个#旗子
对于八进制和十六进制转换类型,#标志将使基本信息包括在格式化的输出中。为o转换类型时,此标志将添加一个前导。'0o'..为x和X转换类型时,它会添加一个前导。'0x'或'0X' :
>>>
>>> '%#o' % 16'0o20'>>> '%#x' % 16, '%#X' % 16('0x10', '0X10')
这个#对于十进制转换类型,将忽略标志。d , i,和u .
对于浮点值,#标志强制输出始终包含小数点。通常,如果浮点数后面没有任何数字,浮点值将不包含小数点。此标志强制包含小数点:
这也适用于以指数表示法显示的值,如图所示。
这个0旗子
当格式化的数值小于指定的字段宽度时,默认行为是使用ASCII空格字符填充字段。这个0标志导致填充'0'相反,字符:
>>>
>>> '%05d' % 123'00123'>>> '%08.2f' % 1.2'00001.20'
这个0标志可与所有数字转换类型一起使用:d , i , u , x , X , o , f , F , e , E , g,和G .
这个-旗子
当格式化的值小于指定的字段宽度时,该值在字段中通常是对齐的。这个-标志将使该值在指定字段中左对齐:
>>>
>>> '%-5d' % 123'123 '>>> '%-8.2f' % 123.3'123.30 '>>> '%-*s' % (10, 'foo')'foo '
您可以使用-带字符串转换类型的标志。s , a,和r,以及所有的数值转换类型。对于数字类型,如果两者都是0和-是存在的,那么0被忽视了。
这个+和' '旗子
默认情况下,正数值没有前导符号字符。这个+标志添加'+'数字输出左边的字符:
>>>
>>> '%+d' % 3'+3'>>> '%+5d' % 3' +3'
这个' '(空格字符)标志导致正数值前面有空格字符:
>>>
>>> '% d' % 3' 3'
这些标志对负数值没有影响,负数值总是具有前导值。'-'性格。
通过字典映射指定值
这个插入到格式字符串中可以指定为字典而不是元组。在这种情况下,每个转换说明符必须在紧接'%'性格。
下面是一个例子:
>>>
>>> '%d %s cost $%.2f' % (6, 'bananas', 1.74)'6 bananas cost $1.74'>>> d = {'quantity': 6, 'item': 'bananas', 'price': 1.74}>>> '%(quantity)d %(item)s cost $%(price).2f' % d'6 bananas cost $1.74'
使用此技术,您可以按任何顺序指定插入的值:
>>>
>>> d = {'quantity': 6, 'item': 'bananas', 'price': 1.74}>>> '%(quantity)d %(item)s cost $%(price).2f' % d'6 bananas cost $1.74'>>> 'It will cost you $%(price).2f for %(item)s, if you buy %(quantity)d' % d'It will cost you $1.74 for bananas, if you buy 6'
上述所有转换说明项- , , .,和-仍然具有相同的含义:
>>>
>>> 'Quantity: %(quantity)03d' % d'Quantity: 006'>>> 'Item: %(item).5s' % d'Item: banan'
注意:如果您指定通过字典映射,您就不能使用*指定或. .
Python输入和输出:结论
在本教程中,您了解了Python输入和输出,以及Python程序如何与用户通信。您现在应该能够从 input() ,并将结果显示到控制台 print() .
您还学习了如何通过将数据格式化为字符串模算子 .
Python提供了两种更好的格式化字符串数据的新方法:弦.format()方法而格式化字符串文字..前往下一个教程,了解他们!