Ewan-Ahiouy 发表于 2023-12-30 20:46:57

求助洛谷 P1200

某日无聊地刷着水题,刷到了1200. 见题目简单,就敲了一个奇异代码,如下:

x =
for i in range(len(x)):
    exec("{} = {}".format(x, i + 1))
a = input()
b = input()
c = ''
d = ''
for i in range(len(a)):
    c += a + " * "
c += str(A)
for i in range(len(b)):
    d += b + " * "
d += str(A)
c = eval(c)
d = eval(d)
if c % 47 == d % 47:
    print("GO")
else:
    print("STAY")

在本地试了,样例都可以过,自制的几个样例也可以过,但是,一放到洛谷上,就RE{:10_266:}

想知道为啥{:5_100:}

FishC 发表于 2023-12-30 20:47:15

这个问题的原因是在洛谷上运行的环境和你本地环境有所不同。洛谷会对你的代码进行一些限制,以确保执行安全,并防止滥用资源。

首先,根据洛谷的规定,你不能使用 `exec` 函数来动态创建变量。这意味着在下面这段代码中,`exec` 函数会导致运行时错误:

x =
for i in range(len(x)):
    exec("{} = {}".format(x, i + 1))

其次,洛谷可能会对输入进行一些特殊处理。你需要根据问题的要求来正确处理输入。请参考以下示例:

a = input().strip()
b = input().strip()

另外,你需要注意变量名的大小写。在你的代码中,`A` 是用大写字母表示的变量,但是你之前没有定义它,所以在执行下面这两行代码时会出现 NameError:

c += str(A)
d += str(A)

最后,在洛谷上运行代码时,尽量避免使用 `eval` 函数。这是因为 `eval` 函数会执行任何传入的代码,这可能导致安全风险。在这个问题中,你可以使用更安全的方法来计算 `c` 和 `d` 的值,而不是使用 `eval` 函数。

综上所述,以下是修改后的代码:

a = input().strip()
b = input().strip()

c = ''
d = ''

for i in range(len(a)):
    c += a+ " * "
c += str(1)

for i in range(len(b)):
    d += b + " * "
d += str(1)

c_value = eval(c)
d_value = eval(d)

if c_value % 47 == d_value % 47:
    print("GO")
else:
    print("STAY")

希望这可以帮助你在洛谷上通过 P1200 题目。祝你好运!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

Ewan-Ahiouy 发表于 2023-12-30 20:49:39

FishC 发表于 2023-12-30 20:47
这个问题的原因是在洛谷上运行的环境和你本地环境有所不同。洛谷会对你的代码进行一些限制,以确保执行安全 ...

洛谷为啥不让用exec{:5_100:}

FishC 发表于 2023-12-30 20:49:47

Ewan-Ahiouy 发表于 2023-12-30 20:49
洛谷为啥不让用exec{:5_100:}

洛谷不允许使用`exec`函数主要是出于安全和代码可读性的考虑。`exec`函数可以执行任意的Python代码,包括对文件系统进行读写、网络请求等操作,这可能导致安全风险。为了确保洛谷平台的安全性,它对代码的执行有所限制。

此外,使用`exec`函数会使代码变得难以理解和维护。由于`exec`函数可以执行任意的字符串作为代码,这可能导致代码逻辑变得混乱且难以跟踪。

当我们编写代码时,应该尽量避免使用`exec`函数,除非确实需要动态生成代码。在大多数情况下,我们可以使用更安全和可读性更好的方法来实现我们的需求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-30 20:50:33

exec("{} = {}".format(x, i + 1))

exec干哈用的

Ewan-Ahiouy 发表于 2023-12-30 20:53:37

sfqxx 发表于 2023-12-30 20:50
exec("{} = {}".format(x, i + 1))

exec干哈用的

可以任意执行Python代码

举个栗子{:10_271:}

exec("x = 10")

相当于给x赋值10.

exec('while True:\n    print("Python YYDS")')

这真的能循环{:10_248:}

sfqxx 发表于 2023-12-30 20:58:51

FishC给的代码不对啊

Ewan-Ahiouy 发表于 2023-12-31 15:16:04

sfqxx 发表于 2023-12-30 20:58
FishC给的代码不对啊

但是FishC说的

“这个问题的原因是在洛谷上运行的环境和你本地环境有所不同。洛谷会对你的代码进行一些限制,以确保执行安全,并防止滥用资源。

首先,根据洛谷的规定,你不能使用 `exec` 函数来动态创建变量。”

是对的,我去掉这个函数就AC了
页: [1]
查看完整版本: 求助洛谷 P1200