• 一行代码搞定ThoughtWorks面试题


    今天在微博看到一道有趣的题目。作为python的脑残粉,自然手痒。


    题目在这里

    FizzBuzzWhizz

    你是一名体育老师。在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:
    1. 你首先说出三个不同的特殊数,要求必须是个位数。比方3、5、7。
    2. 让全部学生拍成一队,然后按顺序报数。
    3. 学生报数时,假设所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz。假设所报数字是第二个特殊数(5)的倍数,那么要说Buzz;假设所报数字是第三个特殊数(7)的倍数。那么要说Whizz。
    4. 学生报数时,假设所报数字同一时候是两个特殊数的倍数情况下,也要特殊处理。比方第一个特殊数和第二个特殊数的倍数。那么不能说该数字,而是要说FizzBuzz, 以此类推。假设同一时候是三个特殊数的倍数。那么要说FizzBuzzWhizz。
    5. 学生报数时,假设所报数字包括了第一个特殊数。那么也不能说该数字。而是要说对应的单词,比方本例中第一个特殊数是3。那么要报13的同学应该说Fizz。

    假设数字中包括了第一个特殊数,那么忽略规则3和规则4,比方要报35的同学仅仅报Fizz,不报BuzzWhizz。


     
    如今,我们须要你完毕一个程序来模拟这个游戏,它首先接受3个特殊数。然后输出100名学生应该报数的数或单词。

    比方,
     
    输入
    3,5,7
    输出(片段)


    1
    2
    Fizz
    4
    Buzz
    Fizz
    Whizz
    8
    Fizz
    Buzz
    11
    Fizz
    Fizz
    Whizz
    FizzBuzz
    16
    17
    Fizz
    19
    Buzz 

    一直到100


    解答:

    fiz = lambda a,b,c:['Fizz'*(str(a) in str(x)) or 'Fizz'*(x%a==0)+'Buzz'*(x%b==0)+'Whizz'*(x%c==0) or x for x in range(1,101) if 0<a<b<c<10]
    print fiz(3,5,7)

    以下是ipython中操作的截图。



    总结

    用python来描写叙述逻辑和算法很爽。当然,描写叙述数据结构c语言更合适。由于c语言有美妙的指针。

    把代码写的太短经常会被领导觉得干活太少了。

    人们往往倾向于认为把代码写的复杂看不懂的人非常牛逼,呵呵。


  • 相关阅读:
    流量调整和限流技术
    微软开源.NET Core的执行引擎CoreCLR{转载}
    Visual Studio 2015 前端开发工作流
    基于Redis的开源分布式服务Codis
    RemoteIE 开发者可跨平台使用IE测试网页
    参加MVP OpenDay 和2015 MVP Community Camp社区大课堂
    etcd:用于服务发现的键值存储系统
    Centos7下安装mono3.10.0
    在 Azure 上使用 Docker运行 Mono
    STOMP协议介绍
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6758366.html
Copyright © 2020-2023  润新知