python中如何判断输入参数是不是为数字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中如何判断输入参数是不是为数字?相关的知识,希望对你有一定的参考价值。
情况如下:
s = 1
则str(s).isdigit() 输出为True
可是当s = 1.0
则str(s).isdigit() 输出为False
问题:
输入无法确定类型,用什么办法可以确定输入的是否为数字(包括整形、浮点型)?
type(num)
type()可以获得num的类型
判断可以用isinstance(num, int)来判断,符合则为true,反之,false追问
嗯,你说的我明白,不过不是我想要的,是我没问清楚题目--
我想问的是:如果输入是string类型,就好比'1'和'1.0',还有'asd'等等的,我想判断的这个输入string内容是否为数字?如上所述,使用str.isdigit(),当输入为'1'的时候输出为True,可是当输入为'1.0'的时候,输出确实False,这该怎么处理?
>>> a=1
>>> b=1.2
>>> c="hello"
>>> print(type(a),type(b),type(c))
(<type 'int'>, <type 'float'>, <type 'str'>)
>>> if type(a) == int:
print 0
0
>>> if type(b) == int:
print 0
>>>
关于c++。 我判断输入是不是为数字,并直到输入数字。
#include<iostream>
using namespace std;
int main()
int m;
while(!(cin>>m))
cout << "不是数字"<<endl;
return 0;
为什么输入字母后会无限循环,应该怎么改?
这个程序错在哪里。
1.首先说明:cin>>是输入流,当执行成功时,他会返回一个流对象,其实就是个引用,说白了就是指针,当失败时会返回0。这个你可以试下,打出来的是地址:
int n;
void* p = (cin>>n);
cout << p << endl;
2.while(!(cin>>m)),因为m是int型,所以只接收int型输入值,当你输入数字时,cin>>m执行成功,>>返回的是地址,地址是正值,即为ture,所以!(cin>>m)为false,不满足while循环条件,所以程序直接over。
3.反之,当你输入字母时,符合while条件进入循环,但是为啥会不断循环呢?因为,你输入不正确,cin内含的状态值ios_base被置为ios_base:: failbit,此时cin状态为错,不接受任何输入。然后就成了这种死循环了。要改的话首先重置cin状态为ios_base::goodbit,此外还要清空输入缓冲区中的错误数据。
while(!(cin>>m))
cin.clear();
cin.sync();
cout << "不是数字"<<endl;
cin.clear();是将输入流状态置为goodbit
cin.sync();是将流清空
怕你听不懂,所以啰嗦了! 参考技术A 只能用字符或者字符串的方式输入,然后判断是否数字,是则自己手工转换为数字
错在于int型只能接受数字的输入,输入字符不是触发异常停止程序,就是这样的死循环 参考技术B #include <iostream>
#include <string>
using namespace std;
int main()
while (true)
string str;
cin >> str;
bool b_all_num = true;
for (unsigned int i = 0; i < str.size(); i++)
if (!(str[i] >= '0' && str[i] <= '9'))
b_all_num = false;
break;
if (b_all_num)
break;
return 0;
cin用的是流输入,兄弟,可以随便存的。
================================================
cin表示将输入的内容,已二进制流的方式,保存到一个地址空间去。虽然你一个int型的变量保存的是会截断,但是cin>>m是不会返回false的。
以上是关于python中如何判断输入参数是不是为数字?的主要内容,如果未能解决你的问题,请参考以下文章