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 条回复
ffffwh
2014-05-27 17:40:11 +08:00
这里改用input()而不是raw_input()吧。
rrfeng
2014-05-27 17:42:59 +08:00
raw_input 永远是 str

input 才会『动态』识别输入类型
pythonbeginner
2014-05-27 17:48:01 +08:00
@ffffwh
@rrfeng

但是用 input 之后,如果我输入字母(string),程序会报错。

@jiang42

隐约感到这个好点,但没用成功。
rrfeng
2014-05-27 17:56:02 +08:00
@pythonbeginner

input() 输入 string 需要 ‘str’
ffffwh
2014-05-27 17:56:09 +08:00
用input()的话string要加引号。。
你知道怎么回事就行了,,,不用太纠结
rrfeng
2014-05-27 17:56:22 +08:00
@pythonbeginner
Google python input 和 raw_input
leiz
2014-05-27 18:18:38 +08:00
@jiang42 这位已经把问题说得很清楚了

LZ混淆了两个概念,类型和字符语义。
你的出发点是希望通过程序来判别字符本身的涵义来推导类型,但是程序里用的是直接判断类型的处理方式。
直接用@jiang42说的几个方法就能解决问题。
imn1
2014-05-27 18:33:32 +08:00
@pythonbeginner 我知道你是0基础,不需要一直强调这点,0基础应该先看变量和数据类型而不是先看if语句怎么写
pythonbeginner
2014-05-27 18:34:07 +08:00
@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'
~
creamiced
2014-05-27 19:58:44 +08:00
@pythonbeginner 就是说无论你输入什么(例如“我是字符串”,“123456”,“abcdef”,等等)系统都是把这些内容当做string类型存起来,与内容无关。这个例子不能多想,你不如想想这样的(功能不同但是思想类似)问题:
输入一个字符串到a,判断输出这个字符串的长度。结构是类似的,都是对于字符串内容的判断,但至少不会把不同的变量类型混杂进去。你提到的例子里虽然有int,float等等,但是涉及到的变量类型只有string。
我建议你现在暂时跳过这个问题,或者再理解理解变量类型的知识。
kqz901002
2014-05-27 20:07:49 +08:00
@pythonbeginner int()类似C的强制类型转换
scola
2014-05-27 20:33:42 +08:00
同意楼上说的,不清楚问题时建议拆分开,先不用raw_input,直接赋值变量测试,自然知道问题在哪里了
pythonbeginner
2014-05-27 20:48:25 +08:00
@creamiced 谢谢,其实我能够理解只要通过raw_input()输入的内容都是 string 类型的,且我也知道它与内容无关,这我在主贴中已经说过了。

发这个帖子的目的,是想看看“如果我就是要做这样一道题”,它有什么方案。当然,@sylv 已经给出了正确答案(虽然必然不是唯一答案),由于我现在还没学到 "try" 和 "except" 语句,尚不能理解他这段程序,但它的这段代码确实让我解决了"如果我就是要做这样一道题"的问题。我现在确实决定跳过这个问题。

谢谢大家,结贴。
kfll
2014-05-28 12:39:23 +08:00

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

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

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

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

© 2021 V2EX