Python的输入输出和格式化输出

blog 206

一、程序的交互

1. 什么是用户交互?

用户交互就是让用户与我们的程序(计算机)进行交互。比如我们通过输入(input)某些内容。让计算机去输出(output)我们的内容。

2. 为什么要有用户交互?

为了然计算机可以像人一样与用户进行沟通交流。

用户交互在现实生活中的引用场景:

之前,我们到银行取钱,我们还需要告诉柜台小姐姐我们的银行卡密码。以便于验证我们该卡是否归我本人所有,之后又把取的金额告诉他,之后就取到钱啦。而现在就不一样了。有和24H自动取款机。我们只需要将我们的卡往上面一插,之后通过小键盘输入(此时就是用户交互的体现)我们卡的密码。就可以取钱啦。

可以发现,在现实生活中,用户交互的体现是非常重要的,它可以让计算机像人一样与用户进行沟通。

3. 如何与用户交互?

Python的输入输出和格式化输出

与用户交互最直接的体现就是输入和输出。

二、input()函数的使用

在Python3中我们可以使用input()函数接受用户的输入,从而实现我们的交互。

# 我们通过input()函数接受的任何数据,都以字符串的形式进行保存。
username = input('请输入你的用户名: ')
print('你的用户名为: ' + username )
print(type(username))
Python的输入输出和格式化输出

实现的效果为:

程序运行的时候,会提示我们 请输入你的用户名。我们输入用户名之后,会将我们的用户名输出到控制台。

那么这就实现了我们接受用户的输入从而输出到控制台。

了解知识:

在Python2中我们可以使用raw_input()函数,该函数的功能和Python3中的input()函数功能一致。

>>> name = raw_input('请输入你的用户名: ')
请输入你的用户名: x1ong
>>> print(type(name))
<type 'str'>
>>>

在Python2中其实也存在input函数。只不过该函数比较鸡肋。

Python2的input函数接受用户的输入之后不会将其存储为字符串类型,而是用户输入的是什么类型,存的就是什么类型。

以下看示例:

>>> name = input('请输入你的用户名: ')
请输入你的用户名: 'x1ong'          # 我们在输入用户名的时候,如果要想存为字符串,需要在x1ong的前后加上单引号。
>>> print(type(name))
<type 'str'>        #  类型为string类型
>>> name = input('请输入你的用户名: ')
请输入你的用户名: [1,2,3]    # 输入一个列表
>>> print(type(name))
<type 'list'>       #  存的也是一个列表类型
>>> name = input('请输入你的用户名: ')
请输入你的用户名: x1ong     # 当我们直接输入 x1ong 的时候报NameError错误,提示 变量 x1ong 未定义
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'x1ong' is not defined
>>>

这个功能就很鸡肋了,假如你想接受用户的输入,那么你是不是还要告诉他:你先去学习一下Python的数据类型再来用我写的程序。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。

显然是不可能的。

于是在Python3中,将input()函数保存的值统一保存为字符串类型。

注意:在Python3中,已不再使用raw_input()函数,Python3中可以使用input()函数接受用户的输入。

三、输出print()函数的使用

print('hello world')  #  只输出一个值
print('hello','你好','wolrd','世界')  #  可以一次输出多个值

# print()函数中有一个参数为end,该参数在print中的内容输出完成的后面继续输出一个字符。默认为'\n'表示换行。
print('hello',end='+')   # end='+'
print('world')  
# 以上两个print的结果为 hello+world  他们使用+号进行连接,而并不是打印换行。

# print()函数中还有一个参数sep,该参数表示每个值的间隔,默认值为空格
print('hello','熊','hello','帅哥',sep='+')  #  hello+熊+hello+帅哥

四、Python的格式化输出

1. 什么是格式化输出?

把一句话的某个内容进行替换。那么这就是格式化输出。

2. 为什么要有格式化输出?

我们经过需要使用固定的格式,去批量发送内容,比如:"xxx老婆你好","亲爱的 xxx 你的话费还有 xxx 余额为 xxx"

那么他们的内容基本上都是固定的,那么我们只需要替换其中的某个值就可以。

3. 如何使用格式化输出?

a. 基于%的格式化输出(元组级别 Python诞生的时候就有)

%s 表示一个字符串占位符。它的作用是替换%()里面对应的字符串值。

%d 表示一个整数占位符。它的作用是替换%()里面对应的数字值。

#  my name is xxx age is xxx 
name = input('请输入的姓名: ')  # 接收用户的输入
age = input('请输入你的年龄: ') # 接收用户的输入
# 由于input()函数将值存储为字符串类型,所以我们需要使用int()函数将其转为int类型。不然后面会报错。
age = int(age) 
# %s 表示字符串类型  %d 表示int类型 (如果传入其他类型会报错) 这样就是我们要将age转为int类型的原因了
text = 'my name is %s age is %s'%(name,age)   # %()里面的东西一定要与字符串中的%号数量且数据类型一致 不然会报错。
print(text)

需要注意的是:

虽说%s只能作为字符串的占位符。但是你传入一个列表进去照样可以格式化。

但是%d只能作为数字类型的占位符。如果你传入的是一个浮点数,那么会自动将其取整输出。

name = [123,456,789]
age = 17.99
text = 'My name is %s age is %d'%(name,age)
print(text)     #  My name is [123, 456, 789] age is 17    # 17.99取整变成了 17。

并且他们的格式,是按部就班的。不能多一个或者少一个,%()里面的要与占位符和数据类型一致

如果只有一个占位符,那么%是不用加括号的,后面紧跟变量名即可。如下:

name = 'x1ong'
text = 'my Name is %s '%name
print(text)

那么%s%d在字符串中都是特殊符号,那么如果我们要就想打印他们两个呢?

直接打印就可以

text = 'my name is %s age is %d'
print(text)   #  my name is %s age is %d   

#  在字符串输出%也是一样的。直接输出就好。只有在字符串的后面加入%号才是格式化字符串的操作。例如:
text = 'my name is %s age is %d'%('x1ong',17)
print(text)  # print(text)
b. 基于format()方法的字符串格式化(Python2.6引用 兼容性好 推荐使用)

用于基本与%方法一致。只不过format()方法使用的是{}作为占位符。

name = 'x1ong'
age = 17
text = 'My name is {} age is {}'.format(name,age)
print(text)     #  My name is x1ong age is 17

其实format()方法的占位符还可以这么用。如下:

text = "My name is {name} age is {age}".format(age=17,name='x1ong')
print(text)    # My name is x1ong age is 17

那么这样的话,我们的format()就不需要按照指定的顺序去传值。而是通过key去传值。

还有一种是通过下标进行传值。

age = 17
name = 'x1ong'
text = "My name is {1} age is {0}".format(age,name)
print(text)  #  My name is x1ong age is 17

注意:format()对值与占位符的关系要求不是很严格。值可以大于占位符的数量,但是占位符不能大于值的数量。不然会报错

如下:

text = "My name is {name} age is {age} ".format(age=17,name='x1ong',test=12,dmeo='帅哥')
print(text)  # My name is x1ong age is 17   

很明显上方代码的占位符少于值,但是依旧可以正常运行。

但是一旦占位符多,值少。那么就会报如下错误:

Python的输入输出和格式化输出

如何在format()字符串中输入普通的{}?

format()字符串中使用{{{变量}}}即可。

age = 17
name = 'x1ong'
text = "My name is {{{1}}} age is {{{0}}}".format(age,name)
print(text)  # My name is {x1ong} age is {17}
c. 基于f的字符串格式化(python3.5引入)

通过在字符串前加入f。使用{传入的变量名}作为占位符。通过变量找值。

name = input("请输入你的姓名: ")
age = input("请输入你的年龄: ")

text = f'my name is {name} age is {age}'
print(text)  #  my name is x1ong age is 17

推荐使用format()方法。原因是兼容性较好,python2.6中引入。

声明:本文章所整理学习的知识全部由Egon老师传授

Egon老师知乎首页:https://www.zhihu.com/people/xiaoyuanqujing

分享