0 基础编程初学者,问个 Python 问题

2014-05-27 14:34:33 +08:00
 pythonbeginner
刚看到python简明教程的 if 段

问题如下:

#! /usr/bin/python
# Filename: check_type.py

a = raw_input('pls enter something: ')

if isinstance(a, int):

print 'it is an integer'

if isinstance(a, float):

print 'it is a float'

if isinstance(a, str):

print 'it is a string'

在上面这段代码中,无论输入什么内容,都会得出 it is a string 的结论(这个原因我知道,应该就是 raw_input()输出的都是string吧...),如何让它能够按照程序的意思来呢?
4398 次点击
所在节点    Python
34 条回复
wliment
2014-05-27 14:56:55 +08:00
判断是否包含字母,或者用正则表达式。
imn1
2014-05-27 15:08:28 +08:00
isinstance 是判断类型,不是内容判断
input输入的就是string类型,除非你做转换,如 a = int(raw_input('pls enter something: '))
但写了转换也没必要判断了
66beta
2014-05-27 15:09:08 +08:00
没学过python,我猜测是默认是string,所以你要判断a是什么东西,就像楼上说的正则
pythonbeginner
2014-05-27 15:10:08 +08:00
@imn1 类型,内容

这两个对我似乎还有点抽象,难道不是判断“输入内容的类型”么?
pythonbeginner
2014-05-27 15:11:40 +08:00
@66beta 正则我还没学到那里去,不过如果只判断是否包含字母肯定是不完整的。比如我可能输入符号,或者汉字,或者其他什么诡异的东西。
66beta
2014-05-27 15:15:04 +08:00
@pythonbeginner 这个不用正则还真想不到,总不能一个个字符判断吧
vob636
2014-05-27 15:29:13 +08:00
搞什么input……直接变量赋值,目的是测试类型,你非搞一些没有关系的其他的东西……初学者就容易这样,学什么就关注一点,你应该明白你不知道的多了……没必要一开始就铺张开
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'
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"
pythonbeginner
2014-05-27 15:38:38 +08:00
@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
pythonbeginner
2014-05-27 15:46:31 +08:00
@Sylv 功能实现了。

其中的 int(),float(),是让程序自己尝试能不能成功将输入的值转换称 int 或 float 且不报错的对么?
jiang42
2014-05-27 15:51:37 +08:00
@pythonbeginner
多看看str的库
isdigit
isnumeric
isdecimal
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转过来的?
wenLiangcan
2014-05-27 15:55:07 +08:00
raw_input 这个函数的返回值只会是字符串
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()来实现的。
guoqiao
2014-05-27 16:06:11 +08:00
窃以为这个例子很烂,给人造成毫无意义的迷惑.
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?"
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
pythonbeginner
2014-05-27 17:37:37 +08:00
@imn1

1、你这样也是不行的,输入字符串会报错
2、我是0基础学习,什么程序都不懂。
pythonbeginner
2014-05-27 17:39:11 +08:00
sorry,刚才 @ 错了,第一句应该回复 @alexkh

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX