灰灰的Mython
本题细节较多,请格外注意粗体字!!!
劝退
题目描述
灰灰受了CEC-IDE
的启发,打算开发自己的自主研发,守正创新
的Mython语言。
为方便广大Python玩家,Mython遵守Python语法(这不代表我们是抄袭,你说鸿蒙兼容apk...呃算了)
但是灰灰的能力有限,不能完全复刻一个CPython或者Jython(其实他就是不会fork仓库)
现在请你来实现,以下功能:
# xxxxx
注释语句,#
后面的内容忽视掉(保证注释独占一行,即无这样的语句:a += b # 将a加上b
)print()
打印函数,接受一个任意类型的参数(可以是数字、字符串或前文已定义的变量),无返回值。 打印完毕后,会自动换行input()
获取输入,无参数,返回输入的内容(一整行)a = xx
赋值语句,将xx
赋值给a
,xx
可能是数字、字符串或前文已定义的变量,a
可以是新的变量也可以是前文定义过的变量a += b
、a -= b
、a *= b
、a /= b
其中a
和b
可能是数字、字符串或前文已定义的变量(字符串只能做+
运算,表示拼接两个字符串),a
可以与b
相同a = b+c
、a = b-c
、a = b*c
、a = b/c
if a == b:
、if a != b:
判断语句,其中a
与b
只能是数字、字符串或前文已定义的变量,不可能是算式或其他表达式(即不存在这样的语句:if a\b != c:
)。if
语句块中的代码都使用缩进区分def FunctionName(a, b, c):
定义函数语句,FunctionName
为函数名,参数使用,
隔开,若无参数则括号里面为空。函数里面的内容使用缩进区分,例如def foo(a): print(a) a += input() print(a)
调用时:
foo(1919810)
注意函数中会存在
return
语句,格式如下def foo(a): print(a) a += input() b = foo2(a) return b
注意
- return后面的语句不会被执行
- return 后面跟一个变量或数字或字符串,不可以返回多个对象组成tuple(因为Mython里不存在tuple这个东西)
- return 也可以返回一个类或者函数 比如:
def foo1(a): print("foo1") print(a) def foo2(): return foo1 foo2()("foo2")
执行结果为
foo1 foo2
class ClassName(BaseClass):
定义一个类,名字为ClassName
,基于BaseClass
(如果没有基类就为class ClassName:
,基类只能是上文定义过的类)。类里面的内容使用一个缩进区分,类中可以直接使用赋值语句,例如class Foo1: a = "aaa" b = 123
也可以使用函数定义语句,例如
class Foo2(Foo1): def __init__(self, b): # 注意类中的方法必须接受至少一个参数,接受的第一个参数为self,指类本身 # 保证self.x调用的属性和方法都已经在上文或基类中定义过 self.b = b def printf(self): print(self.a) print(self.b)
调用时:
b = 114514 # 先实例化一个类 foo = Foo2(b) # 如果该类的`__init__`方法有参数(除self之外),那么在Foo2后面的括号中也应该传入对应参数 # 调用类中的方法 foo.printf() # 传参方式与函数传参一样 # 调用类中的属性 qwq = foo.a print(qwq)
内置类:
str(a)
强制类型转换为str,接受一个参数,将其转换为str类型int(a)
强制类型转换为int,接受一个参数,将其转换为int类型
注意
- 类中不会出现嵌套类,也不会出现空的类
- 函数中不会出现嵌套函数,也不会出现空的函数
- if代码块中不会出现类和函数的定义,也不会出现无任何语句的if代码块
- 给出的Mython代码无空行
- 上文所有提到的
数字、字符串或前文已定义的变量
,也不会出现f(input(), foo2.exec())
这样的情况,但f(foo3.val)
是合法的 用
input()
读入的数据默认是字符串类型,需要手动强制类型转换,比如a = input() print(a) a = int(a) print(a) # 此时输入1,第一次打印的a是str类型,第二次是int类型 # 但是虽然类型不同,输出的结果是两行1,不带引号
保证给出的代码不会产生错误
输入输出格式
输入格式
第一行两个整数\(N, M\),分别表示Mython代码行数和标准输入的行数
接下来的\(N\)行,是Mython格式的代码。 注意,变量名区分大小写,代码格式为上述的格式,该有的空格都会有,比如f(a, b)
的,
后面有空格
再接下来的\(M\)行,表示标准输入,input()
函数一次会获取一整行标准输入
输出格式
执行结果
样例
输入
20 1
a = input()
a = int(a)
b = 1919810
if a == 1:
b = 114514
class HOMOData():
a = 0
b = 0
class HOMO(HOMOData):
def __init__(self, _a, _b):
self.a = _a
self.b = _b
def add(self):
self.a += b
def printf(self):
print(self.a)
print(self.b)
homo = HOMO(a, b)
homo.add()
homo.printf()
1
输出
114515
114514
数据约束
对于\(100\%\)的数据,保证\(1 \leqslant N \leqslant 50\)
有\(20\%\)的数据保证只有题面里的1, 2, 3, 4, 5这五种语句
只有一个测试点中出现了return function
(返回函数)的情况
有\(20\%\)的数据保证其中定义的类无基类(即class ClassName():
)
保证所有数字类型的变量的大小都在int范围以内,且运算过程中不会出现溢出
给出的Mython代码和标准输入中,不会出现中文等除英文外的其他语言
考虑到Mython的执行效率比CPython还低,本题所有测试点的时间限制都为3s
提示:Python可以直接使用exec
切,但请不要使用exec
水AC率
相关
在下列训练计划中: