昨天学习异常,发现如果要求用户输入一个合法的数字并检查的方法。
在网上最早找到的方法是:
while True:
ten=None
try:
ten=int(input("x:"))
except:pass
if type(ten)==int:break
这是检查是否整数。
但是我想,要是一般数字要求的话,整数和浮点数应该都是合法的。所以修改为
while True:
ten=None
try:
ten=input("Input:")
if type(eval_r(ten)) in(int,float):break
except:print('Error input!please redo it ')
再延展一下,如果要求是的普通字母,拒绝特殊字符呢?
while True:
ten=None
try:
ten=input("Input:")
if type(ten) in(str):break
except:print('Error input!please redo it ')
发现不认啊,为什么呢?原来要用in的话,后来的数据不能是基本类型,至少是集合类的。
while True:
ten=None
try:
ten=input("Input:")
if type(ten) in(str,):break
except:print('Error input!please redo it ')
但是如果有更多的要求呢,就不得不借下山表达式这个讨厌的东西了。
另外,出于友好的目的,类型出错以后,不希望只是直接让他重输入,而有个提示:兄弟,你错了,你的名字应该是字母组成的吧?
# -*- coding: utf-8 -*-
import re
def checkit(s):
return re.match('[a-z]',s)
while True:
ten=None
try:
ten=input('兄弟,报上名来: ')
if checkit(ten):break
else:raise TypeError
except:print('不会吧,你的名字应该是字母的: ')
运行之:
>>>兄弟,报上名来: 张
不会吧,你的名字应该是字母的:
>>>兄弟,报上名来: zcl
这又引起另一个问题,要是必须输入汉字呢?
嗯,下回接着研究