【Python】input()函数用法小结

一:input()函数的输入机制
我们编写的大部分程序,都需要读取输入并对其进行处理,而基本的输入操作是从键盘键入数据。Python从键盘键入数据,大多使用其内置的input()函数。但是,不同于程序设计初学者常接触的C和C++,我们不需要在输入之时规定变量的类型。相反,我们可以非常便捷的使用a = input()对任何数据类型的变量a进行赋值,无论是int,float还是列表等等。但是这并不代表Python将程序员的判断数据类型工作完全省去了,如果这样想,那么在编程过程中很容易出现问题。我们知道,在对变量进行赋值时,Python会帮助判断存储数据的类型,不需要我们进行操作,但是input不是这样。
首先,我们需要弄明白我们赋值的变量在python内部到底是以什么形式存在的。下面我将展示一个程序片段在这里插入图片描述
那么我们可以看到,通过type()函数,我们看到无论我们输入的值是int,float还是sring,最后input()函数返回的这个数据的类型均为string型。了解了这一点,将有利于我们更好的使用input()函数。因为在算术运算中,字符串是没法直接和int或float数据进行算术运算的,如果直接使用,那么必然带来TypeError报错。
在这里插入图片描述
即使不报错,我们使用两个直接input()函数键入的数据进行计算,那么很可能是在对两个字符串进行组合而不是算术运算在这里插入图片描述
二:input()函数常涉及的强制类型转换
所以,当我们使用input()函数输入的数据进行算术运算时,我们大多需要使用强制类型转换来允许我们计算。得益于Python便捷的数据类型转换,我们可以十分方便的转换数据类型。
第一种是在键入时进行转换,例如:a = int(input())。这样赋值的数据存储的形式从一开始就是我们转换的数据类型,与C语言,C++等无异。
在这里插入图片描述
第二种则是在使用时进行转换。这样赋值的数据存储的形式仍是input()返回的字符串类型,仅仅在使用时转换,会加大工作量,且有可能因为粗心带来报错,所以要谨慎使用。
在这里插入图片描述
三:带提示的input()函数及其常见问题
在初见input()时,我发现了 variable = input(prompt)这个输入格式,一下子惊如天人。觉得Python的input()函数的用户交互真是友善,从此不再需要再像其他一些编程语言一样单独写一个用户提示语。以下面一个片段为例在这里插入图片描述
可以看到,当我们敲击Enter以后,屏幕上会显示我们编写的提示性语言,并等待用户输入。这样给交互性程序编写带来了便利。
但是,我很快在使用variable = input(prompt)这个形式时遇到了问题,当我理所当然的把input(prompt)中的prompt当作print()函数使用时,我发现input()并不能将变量赋值返回给程序。也就是说,如果我们在input()的提示性语言中加入了变量,就很可能出错,例如:
在这里插入图片描述
这个问题的原因是variable = input(prompt)是直接以字符串形式输出提示性的prompt语言,不能像print()函数一样将值赋给变量并输出。那么这是不是意味着我们不能将变量加入其中呢?毕竟在很多循环中,提示性的语言是需要根据循环次数改变的。
那么实际上我们是可以加入的,解决方法就是上面讲过的强制类型转换,正因为我们已经知道input()以字符串形式输出,所以需要我们将变量转化成string型!但是,需要注意的是,使用的符号是用于字符串连接的“+”而不是分割字符串和变量的“,”——这里需要注意。
在这里插入图片描述
四:利用input()一次性输入多个变量值
我们在编程的时候,常常需要一次性给多个变量赋值。在C语言和C++中,我们使用scanf("%d %d", &a,&b)这样的方式进行输入,其数据以空格为分界。那么在python中我们该如何一次性输入多个值呢?
(1):利用split()函数进行输入,同时,我们不仅可以利用split()函数一次性输入多个数,我们还可以设置分隔符,除了传统的空格形式,也可以用逗号“,”这种更符合语言习惯的方式分隔输入字符。其原理是因为input()输入了一个字符串,而split()函数能根据设定的分割点分割字符串并返回分割后的字符串列表,所以能实现一次性输入多个数据值。范例如下:在这里插入图片描述
但是,这样输入的值仍是字符串型,我们在上面已经说过字符串无法直接参与运算,最好输入时进行类型转换,那么,按照我们第二点的方法转换多输入值可行吗?
在这里插入图片描述
可以看到,这样是不可以的,那么为什么上面单输入可以而多输入报错呢?原因我们其实已经说过了,split()函数返回的是一个列表,spring当然能被转换成int型,但是列表是没法被这样直接转换的,所以我们需要用另一个函数map()来实现多输入的强制类型转换。
map()函数接受两个接收两个参数,一个是函数,一个是序列,map()将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。我们将传入的函数设置为强制类型转换函数int,则split()函数返回的列表里的每一个值都将被强制转换类型,从而实现多输入的类型转换。范例如下:
在这里插入图片描述

发布了7 篇原创文章 · 获赞 7 · 访问量 945

猜你喜欢

转载自blog.csdn.net/qq_46018836/article/details/105199040
今日推荐