V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
KMHook
V2EX  ›  Python

感觉很奇怪的一道python笔试题。

  •  
  •   KMHook · 2013-09-03 09:17:58 +08:00 · 5131 次点击
    这是一个创建于 4100 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同学问道下面这个问题:

    你认为下面的代码是否存在错误呢?如有,请修改

    def check_data(info):
    name, age, height = info
    id = get_id_by_name(name)
    return validate(id, age)

    print check_data([‘xiaoming’,12,170])

    看上去挺奇怪的,一定说有错的话,我只看到‘xiaoming’这用的是中文的引号。
    求教,是否还有别的地方有错呢?
    注:缩进都没问题。
    22 条回复    1970-01-01 08:00:00 +08:00
    mengzhuo
        1
    mengzhuo  
       2013-09-03 09:27:02 +08:00
    看不出
    不是Pythonic算不算?
    larkifly
        2
    larkifly  
       2013-09-03 09:36:14 +08:00
    看了半天没看出来,期待楼下回答
    cxshun
        3
    cxshun  
       2013-09-03 09:40:11 +08:00
    真没看出啥问题啊,楼主XD继续。中文引号,貌似不是啊,是英文的引号啊。难道是指缩进问题?
    linnchord
        4
    linnchord  
       2013-09-03 09:40:45 +08:00
    估计是校验、异常、风格啥的,3行代码有2个未知外部调用,含混不清。

    这种题目通常是出题人拍脑袋生搬硬套出来的,不及格的笔试题。
    jianghu52
        5
    jianghu52  
       2013-09-03 09:42:56 +08:00
    黏贴跑了一下。引号有问题,另外,还报错是说是get_id_by_name 这个方法没定义。
    sethverlo
        6
    sethverlo  
       2013-09-03 09:43:49 +08:00
    感觉是开放性的题吧……

    比如说没有类,比如说不知道有没有对 name 进行检查,比如说 check_data 和 validate 一起出现有点儿奇怪的感觉……
    sethverlo
        7
    sethverlo  
       2013-09-03 09:44:15 +08:00
    @jianghu52 这个肯定没法直接跑的……validate 也没定义。
    scusjs
        8
    scusjs  
       2013-09-03 09:44:17 +08:00
    我看到的第一个问题是缩进。。。。
    felinx
        9
    felinx  
       2013-09-03 09:51:45 +08:00
    大家没有注意到id是关键字吗?

    另外
    name, age, height = info
    这个是非常容易出错的
    sethverlo
        10
    sethverlo  
       2013-09-03 09:53:15 +08:00
    @felinx

    >>> print id
    <built-in function id>
    >>> id = 3
    >>> print id
    3
    yeelone
        11
    yeelone  
       2013-09-03 10:06:20 +08:00
    没看出来错在哪里 ,等解释
    felinx
        12
    felinx  
       2013-09-03 10:08:44 +08:00
    @sethverlo

    不是说运行有问题,是不推荐这么做,关键字最好不要当变量或方法名,假设后面的代码要用到id呢?
    Kabie
        13
    Kabie  
       2013-09-03 10:20:28 +08:00
    @felinx 严格地说这不是关键字是内置函数吧……这里是小函数内部立刻返回了也不会有太大关系……

    当然这确实是不好的做法……虽然我觉得还够不上错误……
    sethverlo
        14
    sethverlo  
       2013-09-03 10:22:26 +08:00
    @felinx 我上面也说了,我觉得这是个开放性的题……语法错误可能没有,但是别的错误倒是可以挑一堆出来……
    mengzhuo
        15
    mengzhuo  
       2013-09-03 10:32:59 +08:00
    @felinx 各种ORM用filter,id, hash笑而不语
    leoleozhu
        16
    leoleozhu  
       2013-09-03 10:41:08 +08:00
    是只验证了age,而没有验证height么?
    Jowei
        17
    Jowei  
       2013-09-05 10:30:50 +08:00 via Android
    我当时加个自以为的 try ...except...
    然后把那个多余的传入值给干掉了。

    也不是很清楚,这道题到底要干嘛。
    leiz
        18
    leiz  
       2013-09-05 10:46:42 +08:00
    函数内关键字,不确定的话,前面加'_',例: _id
    clippit
        19
    clippit  
       2013-09-05 11:01:15 +08:00
    height传入有啥用?
    qzero
        20
    qzero  
       2013-09-05 11:30:41 +08:00
    没有验证参数列表的长度。
    qzero
        21
    qzero  
       2013-09-05 11:31:44 +08:00
    而且可以写成 def check_data(*info): 这样调用的时候可以写的好看点。
    siteshen
        22
    siteshen  
       2013-09-05 18:24:00 +08:00
    @leiz 貌似 pep8 推荐后面加'_',前面 加'_'表示 private。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1346 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:56 · PVG 07:56 · LAX 15:56 · JFK 18:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.