鱼C论坛

 找回密码
 立即注册
查看: 995|回复: 7

[已解决]求助洛谷 P1200

[复制链接]
发表于 2023-12-30 20:46:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
某日无聊地刷着水题,刷到了1200. 见题目简单,就敲了一个奇异代码,如下:
x = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
for i in range(len(x)):
    exec("{} = {}".format(x[i], i + 1))
a = input()
b = input()
c = ''
d = ''
for i in range(len(a)):
    c += a[i] + " * "
c += str(A)
for i in range(len(b)):
    d += b[i] + " * "
d += str(A)
c = eval(c)
d = eval(d)
if c % 47 == d % 47:
    print("GO")
else:
    print("STAY")

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

想知道为啥
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

洛谷为啥不让用exec
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-30 20:49:47 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-12-30 20:49
洛谷为啥不让用exec


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-30 20:50:33 | 显示全部楼层
exec("{} = {}".format(x[i], i + 1))

exec干哈用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-30 20:53:37 | 显示全部楼层
sfqxx 发表于 2023-12-30 20:50
exec("{} = {}".format(x, i + 1))

exec干哈用的

可以任意执行Python代码

举个栗子
exec("x = 10")

相当于给x赋值10.
exec('while True:\n    print("Python YYDS")')

这真的能循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-30 20:58:51 | 显示全部楼层
FishC给的代码不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-31 15:16:04 | 显示全部楼层
sfqxx 发表于 2023-12-30 20:58
FishC给的代码不对啊

但是FishC说的

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

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


是对的,我去掉这个函数就AC了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表