【官方攻略】小舞编程题目答案与解析

《我的公司996》为了高度还原程序员的日常工作生活,加入了一些硬核的编程题目。鉴于对不懂编程的玩家不够友好,制作组决定公布所有题目答案并附带解析。

玩家可直接在速查表中找到最佳答案。如对编程感兴趣,可查看答案解析,也请各位程序员大佬多提宝贵意见。

题目答案速查表

题目 答案
小舞零基础初学编程,应该学哪门语言? Python
这段Python程序无法执行,以下哪个问题可以忽略? 使用中文做变量名
跳出循环语句是什么? break
如何生成0-99间的随机整数? random.randint(0,99)
用哪种数据结构存放题目相关信息? 字典
用什么存储答案信息的数据? 元组
为了使用random.shuffle随机乱序,应该把变量强制转化为哪种类型? 列表
换行应该怎么写? \n
如何实现列表切片,取出其中最前面的28个元素? [:28]
以下哪个概念不属于面向对象范畴内? 递归
self究竟是什么? 实例本身
@staticmethod方法没有self参数,怎么解释? 正常现象
有将Unicode数值转化为字符本身的函数吗? chr
能将多行循环代码简写为一行的特殊语法是? 生成式

题目答案解析

提问:小舞零基础初学编程,应该学哪门语言?

guido_van_rossum

  • 回答:Python
  • 解析:哪一种语言更适合初学见仁见智,此处选择Python有三点原因:
    • 1.容易上手。
    • 2.游戏引擎用Python编写。
    • 3.作者也不会别的语言。

提问:这段Python程序无法执行,以下哪个问题可以忽略?

py_learn2

  • 回答:使用中文做变量名
  • 解析:Python中可以使用中文做变量名,但是不建议。其余的三项不可忽略错误:
    • 1.第4行的等于必须使用双等于,否则代表赋值。
    • 2.第4行结尾使用了中文冒号,不符合语法。
    • 3.第5行和第7行都不符合Python的缩进规则。

提问:跳出循环语句是什么?

py_learn3

  • 回答:break
  • 解析:
    • break跳出循环。
    • continue跳过本次循环。
    • return直接返回函数。
    • exit是不存在的用法。

提问:如何生成0-99间的随机整数?

py_learn4

  • 回答:random.randint(0,99)
  • 解析:
    • random.random()只能生成[0,1)之间的实数。
    • random.shuffle(x)用于打乱x序列中的元素。
    • random.choice(x)会从x序列中随机抽取一个值。
    • random.sample(x,n)会从x序列中随机抽取n个值。
    • 其余random.int,random.range,random.random.get均为不存在的用法。

提问:用哪种数据结构存放题目相关信息?

py_learn5

  • 回答:字典
  • 解析:题目信息的结构类似:
    {'题目一:XXX':answer1,'题目二:XXX':answer2...}
    
  • 由一个字符串作为题目信息,并指向唯一的答案信息,是比较典型的键值对,比较适合用Python的字典存储。
  • 其余数据结构也不是不能完成,只是可能会涉及到更多其它知识。

提问:用什么存储答案信息的数据?

  • 回答:元组
  • 解析:答案信息的结构类似:
    answer1 = ( '答案1',2,'答案2',3,... )
    
  • 一个答案字符串加一个答案的分值交替出现,存储在元组内。
  • 列表也可以完成存储,但列表是可变的,不如元组安全。
  • 数组是Python中没有的概念。
  • 文件存储此时没有必要,而且读取后仍然需要体现为一定的数据结构。

提问:为了使用random.shuffle随机乱序,应该把变量强制转化为哪种类型?

py_learn6

  • 回答:列表
  • 解析:列表适合作为乱序抽取的内容。
    • 元组由于不可变,不可乱序。
    • 字典本身就是无序的,也无法乱序。
    • 字符串并不支持random.shuffle方法。

提问:换行应该怎么写?

  • 回答:\n
  • 解析:固定写法,要使用反斜杠。
    • \t类似tab键。
    • <br/>是html的换行。

提问:如何实现列表切片,取出其中最前面的28个元素?

  • 回答:[:28]
  • 解析:[:28][0:28]的简写,Python切片是前取后不取,因此所获得的元素下标为:0,1,2,3…27,共计28个。

提问:以下哪个概念不属于面向对象范畴内?

  • 回答:递归
  • 解析:递归概念在普通函数中就会涉及。类,实例,方法,都是典型的面向对象概念。

提问:self究竟是什么?

py_learn7

  • 回答:实例本身
  • 解析:此处第8行的self位于初始化函数__init__内,表示的是新创建的Fighter类对象的实例本身。简单理解,可以认为self就是__init__函数的参数,是一种固定写法,但此处的self一定不是类本身。

提问:@staticmethod方法没有self参数,怎么解释?

  • 回答:正常现象
  • 解析:@staticmethod是静态方法的装饰器,静态方法无需传递实例本身,因此不需要也不能添加self参数。

提问:有将Unicode数值转化为字符本身的函数吗?

  • 回答:chr
  • 解析:chr可将Unicode数值转为字符。
    • ord的功能正好相反,是把字符转为数值。
    • str只能起到强制转换字符串的作用。
    • 注意:chr和ord这两个内置函数只有在Python3中才能完美实现此功能(然而游戏语言其实是Python2的……)。

提问:能将多行循环代码简写为一行的特殊语法是?

  • 回答:生成式
  • 解析:生成式是Python的一种特殊语法,通常可将循环语句写在一行中。以获取列表[1,3,5,7,9]的写法为例:
# 常规写法
result = []
for i in range(10):
    if i % 2:
        result.append(i)
print(result)

# 生成式写法
print([i for i in range(10) if i % 2])
  • 其余答案提到的概念均与特殊语法无关。