1
wliment 2014-05-27 14:56:55 +08:00
判断是否包含字母,或者用正则表达式。
|
2
imn1 2014-05-27 15:08:28 +08:00
isinstance 是判断类型,不是内容判断
input输入的就是string类型,除非你做转换,如 a = int(raw_input('pls enter something: ')) 但写了转换也没必要判断了 |
3
66beta 2014-05-27 15:09:08 +08:00
没学过python,我猜测是默认是string,所以你要判断a是什么东西,就像楼上说的正则
|
4
pythonbeginner OP |
5
pythonbeginner OP @66beta 正则我还没学到那里去,不过如果只判断是否包含字母肯定是不完整的。比如我可能输入符号,或者汉字,或者其他什么诡异的东西。
|
6
66beta 2014-05-27 15:15:04 +08:00
@pythonbeginner 这个不用正则还真想不到,总不能一个个字符判断吧
|
7
vob636 2014-05-27 15:29:13 +08:00 1
搞什么input……直接变量赋值,目的是测试类型,你非搞一些没有关系的其他的东西……初学者就容易这样,学什么就关注一点,你应该明白你不知道的多了……没必要一开始就铺张开
|
8
Sylv 2014-05-27 15:31:37 +08:00
a = raw_input('pls enter something: ')
try: -> int(a) -> print 'it is an integer' except: -> try: -> -> float(a) -> -> print 'it is a float' -> except: -> -> print 'it is a string' |
9
mulog 2014-05-27 15:31:47 +08:00
这样行不。。虽然有点蛋疼
>>> def test(a): ... try: ... try: ... b = int(a) ... print("int") ... except ValueError: ... b = float(a) ... print("float") ... except ValueError: ... print "string" |
10
pythonbeginner OP @vob636 其实目的是为了给自己出题。因为我原本给自己出的题是这个样子的:
#! /usr/bin/python # Filename: check_type.py a = raw_input('pls enter something: ') running = True while running: if isinstance(a, str): print "You entered a string, pls try again." running = False if isinstance(a, int): print a + 1 if isinstance(a, float): print a - 1 |
11
pythonbeginner OP |
12
jiang42 2014-05-27 15:51:37 +08:00 1
|
13
imn1 2014-05-27 15:54:48 +08:00
@pythonbeginner
isinstance('1', int) false isinstance('1', str) true isinstance(1, int) true isinstance('1.1', float) false isinstance('1.1', str) true isinstance(1.1, float) true isinstance 判断的是type,你可能要看看手册关于类型的部分 input 输入的都是相当于带引号的,就是都是字串类型,无论输入什么内容 我感觉你是从php转过来的? |
14
wenLiangcan 2014-05-27 15:55:07 +08:00 1
raw_input 这个函数的返回值只会是字符串
|
15
alexkh 2014-05-27 16:02:30 +08:00
把a = raw_input('pls enter something: ')
改为 a = input('pls enter something: ') 即可。 官方文档中对于input()的描述是:等同于eval(raw_input(prompt)),通常情况下都使用raw_input()。 也就是说input()其实也是通过raw_input()来实现的。 |
16
guoqiao 2014-05-27 16:06:11 +08:00 1
窃以为这个例子很烂,给人造成毫无意义的迷惑.
|
17
vob636 2014-05-27 17:08:35 +08:00
@pythonbeginner 一般的话……
#!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'florije' if __name__ == '__main__': running = True while running: var = raw_input('pls enter something: ') # todo deeply setting something try: result = int(var) running = False result += 1 print result except Exception: try: result = float(var) running = False result -= 1 print result except Exception: print "neither int or float" if isinstance(var, str): print "You entered a string, pls try again." else: print "Are you joking?" |
18
lu18887 2014-05-27 17:30:56 +08:00
总结来说,两种方式,主动判断
@wliment 说的正则表达式! 被动判断(通过类型转换失败抛出异常)如 @mulog 所说。 我推荐第一种方式,第二种不是很靠谱,比如可以把float强制转换成 int却不抛出异常等等,这种行为依赖于语言的实现太多。 正则表达式又要小小的学习一下了! http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F http://baike.baidu.com/view/94238.htm 正则表达式还分标准正则表达式和跟特定语言相关的正则表达式的,不过基本大同小异。你可以GOOGLE一下 PYTHON 正则表达式 顺便推荐一个正则表达式校验工具 REGEX BUDDY |
19
pythonbeginner OP |
20
pythonbeginner OP sorry,刚才 @ 错了,第一句应该回复 @alexkh
|
21
ffffwh 2014-05-27 17:40:11 +08:00
这里改用input()而不是raw_input()吧。
|
22
rrfeng 2014-05-27 17:42:59 +08:00
raw_input 永远是 str
input 才会『动态』识别输入类型 |
23
pythonbeginner OP |
24
rrfeng 2014-05-27 17:56:02 +08:00
|
25
ffffwh 2014-05-27 17:56:09 +08:00
用input()的话string要加引号。。
你知道怎么回事就行了,,,不用太纠结 |
26
rrfeng 2014-05-27 17:56:22 +08:00
@pythonbeginner
Google python input 和 raw_input |
27
leiz 2014-05-27 18:18:38 +08:00
|
28
imn1 2014-05-27 18:33:32 +08:00
@pythonbeginner 我知道你是0基础,不需要一直强调这点,0基础应该先看变量和数据类型而不是先看if语句怎么写
|
29
pythonbeginner OP @leiz
"你的出发点是希望通过程序来判别字符本身的涵义来推导类型,但是程序里用的是直接判断类型的处理方式。" 好抽象。我问的问题其实很简单,就是我知道我的代码有错,我只想知道怎么能够让我的代码正确(能够按照我想要的结果运行)。 你说的我“望通过程序来判别字符本身的涵义来推导类型”,这个我完全不理解,"字符"本身应该就是没有任何涵义的吧? 我确实是0基础学习,什么php、c神马的都是一丁点都不会,决定自学python,是因为看到很多人说 python 确实是一种很适合程序入门的语言。我目前能够理解的也不过是 if、print 等这类极度简单的。因此,@jang42 所说的库,我还没懂。反正我像下面这样写是不对的: #! /usr/bin/python # Filename: check_type.py a = raw_input('pls enter something: ') if a.isnumeric(): ->print 'it is a numeric' if a.isdecimal(): ->print 'it is a decimal' if a.isdigit(): ->print 'it is a digit' ~ |
30
creamiced 2014-05-27 19:58:44 +08:00
@pythonbeginner 就是说无论你输入什么(例如“我是字符串”,“123456”,“abcdef”,等等)系统都是把这些内容当做string类型存起来,与内容无关。这个例子不能多想,你不如想想这样的(功能不同但是思想类似)问题:
输入一个字符串到a,判断输出这个字符串的长度。结构是类似的,都是对于字符串内容的判断,但至少不会把不同的变量类型混杂进去。你提到的例子里虽然有int,float等等,但是涉及到的变量类型只有string。 我建议你现在暂时跳过这个问题,或者再理解理解变量类型的知识。 |
31
kqz901002 2014-05-27 20:07:49 +08:00
@pythonbeginner int()类似C的强制类型转换
|
32
scola 2014-05-27 20:33:42 +08:00 via Android
同意楼上说的,不清楚问题时建议拆分开,先不用raw_input,直接赋值变量测试,自然知道问题在哪里了
|
33
pythonbeginner OP @creamiced 谢谢,其实我能够理解只要通过raw_input()输入的内容都是 string 类型的,且我也知道它与内容无关,这我在主贴中已经说过了。
发这个帖子的目的,是想看看“如果我就是要做这样一道题”,它有什么方案。当然,@sylv 已经给出了正确答案(虽然必然不是唯一答案),由于我现在还没学到 "try" 和 "except" 语句,尚不能理解他这段程序,但它的这段代码确实让我解决了"如果我就是要做这样一道题"的问题。我现在确实决定跳过这个问题。 谢谢大家,结贴。 |
34
kfll 2014-05-28 12:39:23 +08:00
|