最小击键 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 计算器问题的主要内容,如果未能解决你的问题,请参考以下文章