用户交互就是人类向计算机中input/输入数据,计算机向外output/输出数据。
与用户进行交互的原因是为了让我们与计算机能够像人与人之间一样可以沟通交流。
与用户交互的本质就是输入和输出
在 Python 3 中,使用 input() 函数向计算机中输入内容。对于 input() 函数来说,无论用户输入什么类型的数据,都会被保存成 str 类型的数据,然后将 str 类型数据的内存地址赋值给等号左边的变量名。
user_name = input('请输入您的用户名:')
user_pwd = input('请输入您的密码:')
print(user_name)
print(user_pwd)
#结果
请输入您的用户名:1
请输入您的密码:2
1
2
注意
在 Python 2 中,使用 raw_input() 函数,对于 raw_input() 函数来说,无论用户输入什么类型的数据,都会被保存成 str 类型的数据,然后将 str 类型数据的内存地址赋值给等号左边的变量名。
在 Python 2 中,也有一个 input() 函数,该函数虽然与 Python3中的函数同名,都为 input() ,但是功能确实有差别的,怎么讲?这个函数并不像 Python3中的 input() 函数那样,无论用户输入什么类型的数据,都会被保存成 str类型的数据, Python 2中的 input() 函数将数据保存成什么类型的数据是取决于我们人类的,比如我们给计算机一个int类型的数据,那么 input() 函数就会将这个数据存成int类型的数据。
在 Python 3 中,使用 print() 函数,计算机可以向外输出内容
print('Hello World!') # 一次只打印一个值
# 结果
Hello World!
print('hello', 'world', 'python', 'java', 'c', 'c++', 'go', sep='|', end='^\n') # 一次打印多个值,多个值之间使用 , 来分隔,sep='|'的效果就是多个值之间使用 | 来间隔,end='^\n'的效果就是最后一个值的后面跟着一个 ^ 以及 换行。
# 结果
hello|world|python|java|c|c++|go^
# 默认情况下,end=''参数的默认值是'\n'(代表换行),可以将end参数改成其他任意字符
print('tim', end='')
print('cook', end='&')
print('apple', end='@')
# 结果
timcook&apple@
所谓的格式化输出,直白地讲就是控制输出的格式,比如我们想让计算机那样那样输出,或者这样这样输出,说白了就是指定格式,这样的情况我们称之为 格式化输出。
因为我们经常会输出具有某种固定格式的内容,比如说:'亲爱的xxx同学,你好,我是xxx学校的xxx' ,我们需要做的就是将 xxx 替换为具体的内容。
特点:兼容性好,性能弱
print('亲爱的%s同学,你好,我是%s学校的%s,我们学校一共有学生%s' % ('Tim', 'MIT', 'Cook', 10000))
# 结果
亲爱的Tim同学,你好,我是MIT学校的Cook,我们学校一共有学生10000
print('亲爱的%s同学,你好,我是%s学校的%s,我们学校一共有学生%d' % ('Tim', 'MIT', 'Cook', 10000))
# 结果
亲爱的Tim同学,你好,我是MIT学校的Cook,我们学校一共有学生10000
user_name = input('Please enter your name: ')
user_age = input('Please enter your age: ')
print("My name is %s and I'm %s years old!" % (user_name, user_age))
# 结果
Please enter your name: xiaowu
Please enter your age: 22
My name is xiaowu and I'm 22 years old!
user_name = input('Please enter your name: ')
user_age = input('Please enter your age: ')
user_gender = input('Please enter your gender: ')
user_inc = input('Please enter your corporation: ')
print('''
... ----------info of %s----------
...
... Name : %s
...
... Age : %s
...
... Gender : %s
...
... Corporation : %s
...
... ----------info of %s----------
... ''' % (user_name, user_name, user_age, user_gender, user_inc, user_name))
# 结果
Please enter your name: xiaowu
Please enter your age: 22
Please enter your gender: 1
Please enter your corporation: 2
... ----------info of xiaowu----------
...
... Name : xiaowu
...
... Age : 22
...
... Gender : 1
...
... Corporation : 2
...
... ----------info of xiaowu----------
...
进程已结束,退出代码为 0
特点:兼容性适中,性能适中
字符串 str 类型中有一个方法:format()
first_name = input('Please enter your first name: ')
second_name = input('Please enter your second name: ')
print('My first name is {0}, My second name is {1}'.format(first_name, second_name))
# 结果
Please enter your first name: first
Please enter your second name: second
My first name is first, My second name is second
兼容性差,性能强
f-strings 格式化输出是 Python 3.6 中推出的 ,因此,只有在 3.6 版本以及更新的解释器中才能够使用该格式化输出方法。
user_name = input('请输入用户名:')
print(f'你好{user_name}')
# 小武
请输入用户名:xiaowu
你好xiaowu
兼容性强,安全性高
从 Python 2.4 起,Python标准库 string 引入了 Template 也可以用来格式化字符串,所以说,与前三种方式的一个显著区别就是:Template属于python语言的核心语法特征,使用方式如下
from string import Template
name='xiaowu'
templ_string = 'Hello $name, there is a $error error!!!'
res=Template(templ_string).substitute(name=name, error=hex(12345))
print(res)
# 结果
Hello xiaowu, there is a 0x3039 error!!!
使用模板字符串 Template 的最佳的时机就是当你的程序需要处理由用户提供的输入内容时。模板字符串是最保险的选择,因为可以降低复杂性。
其他一些复杂的字符串格式化技巧的可能会给你的程序带来安全漏洞。
如果格式化的字符串是由用户输入的,那么基于安全性考虑,推荐使用Template
如果使用的 Python3.6+ 版本的解释器,推荐使用:f-strings
如果要兼容 Python2.x 版本的 Python解释器,推荐使用:str.format
如果不是测试的代码,不推荐使用%