最小击键 Python 计算器问题

Posted

技术标签:

【中文标题】最小击键 Python 计算器问题【英文标题】:Minimum Keystrokes Python Calculator Problem 【发布时间】:2021-10-18 00:24:49 【问题描述】:

我无法计算您必须按键盘输入某个字符串的最少次数。规则如下:

您键入的每个字母都算作 1 次击键 激活大写锁定计为 1 次击键 停用大写锁定计为 1 次击键 按 shift 计为 1 次击键 按住 shift 键的时间不能超过一个字母 您需要编写一个函数,该函数接收一个字符串并返回键入该字符串所需的最小击键次数(整数)

我在尝试用 Python 编写代码时遇到了一些小问题。 到目前为止我的代码:

def getAns(string):
    uppercase_count = 0
    keystrokes = 0
    for i in range(len(string)):
        if string[i] == string[i].upper():
            uppercase_count += 1 
            if uppercase_count == 1:
                keystrokes += 1
        else:
            if uppercase_count > 1:
                keystrokes += 1
            uppercase_count = 0
        keystrokes += 1     
    return keystrokes

测试字符串:

"EWlweWXZXxcscSDSDcccsdcfdsFvccDCcDCcdDcGvTvEEdddEEddEdEdAs"

我的函数返回 79 而不是应该返回的 78。我在我的逻辑中找不到任何问题。有人可以帮帮我吗?

这是正确的答案代码,但我不明白其中的区别

def getAns(self, s):
    if not s:
        return 0
    
    cap = 0
    res = 0
    chars = ["abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
            
    for i,c in enumerate(s):

        if c in chars[cap]:
            res+=1 
        else:
            t = abs(cap - 1)
            
            if i+1 < len(s) and s[i+1] in chars[t]:
                cap = t
                
            res+=2

    return res

【问题讨论】:

遵循你的代码真的很难。什么是m,什么是x,什么是ups?请通过输入有意义的名称重新编写您的代码(当然,如果您想帮助我们处理逻辑部分) @SeVenVo1d 谢谢你的建议!我更新了代码。 我认为79是正确的 如果字符串以大写结尾会发生什么?喜欢aabCC @Amin 那么你就不必释放大写锁定。我也输入了解决方案代码,但我无法区分他们的逻辑和我的逻辑。 ^ 【参考方案1】:

当您将输入字符串减少到 最小 子字符串时,您仍然会得到不同的输出,您将识别此子字符串:

"DCcD"

对于此输入,您的函数将返回 7,而正确的代码将返回 6。

你的函数识别这个序列:

Caps ON D C Caps OFF c Shift+D = 7

但是……它来了……正确的解决方案确定了这个序列:

Caps ON D C Shift+c D = 6

考虑到你可以使用Shift CAPS-LOCK 开启时,会产生一个小写字母!

【讨论】:

你知道如何编写函数以便考虑到这一点吗? 但是您已经有了正确解决方案的代码? 哦等等。由于某种原因,我忘记了这一点。对不起

以上是关于最小击键 Python 计算器问题的主要内容,如果未能解决你的问题,请参考以下文章

最小化后如何在 Windows 中的单个应用程序上编程击键?

用python计算最大公约数和最小公倍数

井字游戏最小最大算法 Python。计算机算法并不稳健

python基于最小二乘法计算拟合

python基于最小二乘法计算拟合

如何计算一个python函数来计算/绘制点和曲线之间的最小距离?