python:两个相互依赖的“流体”变量

2024-05-14 13:33:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在我当前的脚本中:

topfactorial = str(facorialmath2)
start = "%s! = "%(factnum)
if len(start) + len(topfactorial) > 2000:
    end = " and %s more digits"%(2000-msglen)
    msglen = 2000 - len(end) - len(start)
    topfacotial = topfactorial[:msglen]
    msg = start+topfacotial+end.format(message)
else:
    msg = start+topfactorial.format(message)
await client.send_message(message.channel, msg)

我写了一个块来缩短消息的长度(由于discord的消息长度限制),所以我写了一个起始字符串(它是流动的,因为它返回作为字符串一部分的输入)、一个中间字符串(它是它们的输入数的阶乘,所以是流动的)和一个结束字符串(它告诉多少字符必须被切断)以适应信息限制,所以也流体)。我的问题是,在计算要从中间字符串中删除的字符数时,需要使用结束字符串的长度来计算所有三个字符串的总长度,并从中间字符串中删除那么多字符。但是,要截断的字符数量在第三个字符串中使用,因此这两个变量相互依赖。这不起作用,因为其中一个变量需要先定义,但不能,因为另一个没有。有什么方法可以解决这个问题吗?我想做的事有可能吗?你知道吗

先谢谢你


Tags: 字符串脚本format消息messagelenmsg字符
1条回答
网友
1楼 · 发布于 2024-05-14 13:33:22

这不是最干净的方法,但把它放在一个循环,直到它是正确的大小。为了测试,我做了一些小改动。您需要先定义所有内容,然后再尝试定义消息长度,并创建taked变量来计算执行了多少次。如果消息在长度范围内,它将自动保持为0。循环将继续从topfactrial获取消息,直到消息长度与最大长度匹配。它还考虑到采取两位数,并将删除正确的数额。你知道吗

topfactorial = str(facorialmath2)
start = "%s! = "%(factnum)
taken = 0
end = " and %s more digits"%(taken)
message = start+topfactorial
maxlen = 2000
msglen = len(message)
if msglen > maxlen:
    while msglen > maxlen:
        taken += 1
        truncfactorial = topfactorial[:len(topfactorial)-taken]
        start = "%s! = "%(factnum)
        end = " and %s more digits"%(taken)
        message = start+truncfactorial+end
        msglen = len(message)
    await client.send_message(message.channel, message)
else:
    await client.send_message(message.channel, message)
网友
2楼 · 发布于 2024-05-14 13:33:22

免责声明:绝对有一个更聪明的方法来做到这一点。你知道吗

def truncate(s, limit=2000):
    if len(s) <= limit:
        return s
    addition = ' + {} characters'
    start = limit - len(addition)
    display = s[:start]
    remainder = len(s[start:])
    for i in range(start, 0, -1):
        candidate = display + addition.format(remainder)
        if len(candidate) <= limit:
            return candidate
        display = display[:-1]
        remainder += 1
    raise ValueError('String too big to fit in message')

相关问题 更多 >

    热门问题