我正在编写代码,但没有得到所需的输出。如果有人可以指出我做错的事情来帮助我,那将是很棒的。我的代码是:
shift = input()
word_original = input()
corrected_word = ""
keyboard_characters = "qwertyuiopasdfghjkl;zxcvbnm,./"
if shift == "R":
for i in range(len(shift)-1):
ind = keyboard_characters.find(shift[i]) + 1
corrected_word = corrected_word + keyboard_characters[ind]
else:
for i in range(len(shift)-1):
ind = keyboard_characters.find(shift[i]) - 1
corrected_word = corrected_word + keyboard_characters[ind]
print(len(corrected_word))
根据我的说法,我应该得到的是corrected_word,但实际上它的长度为0,即我最初定义的长度,即空字符串
答案 0 :(得分:0)
您的问题是您的循环在for i in range(len(shift)-1):
上运行,并建议您使用for i in range(len(word_original )-1):
。
这里不需要通过索引对字符串进行迭代,您只需进行
for letter in word_original:
substIdx = keyboard_characters.find(letter) + 1
[...]
但是如果您的文本包含'/'
,这将使您越界错误,因为您的索引现在超出了keyboard_characters
的长度。另外,您也不会处理不存在的映射(例如空间),对于该映射,find将返回可能不正确的值。
修正您的代码:
字符串是不可变的。通过使用s = s + "..."
,您将创建许多扔掉性能的strings
。请改用list
,然后再使用''.join(mylist)
来获取字符串。
shift = input()
word_original = input()
corrected_word = []
keyboard_characters = "qwertyuiopasdfghjkl;zxcvbnm,./"
keyset = set(keyboard_characters) # tesint for 'in' faster on sets
lenk = len(keyboard_characters) # compute once, use often
if shift == "R":
for letter in word_original:
if letter not in keyset: # no substitution? use as is
corrected_word.append( letter )
continue
ind = keyboard_characters.find(letter) + 1
if ind == lenk:
ind = 0 # wrap around
corrected_word.append(keyboard_characters[ind])
else:
for letter in word_original:
if letter not in keyset: # no substitution? use as is
corrected_word.append( letter )
continue
ind = keyboard_characters.find(letter) - 1
if ind < 0:
ind = lenk # wrap around
corrected_word.append( keyboard_characters[ind] )
corrected_word_str = ''.join(corrected_word)
print(corrected_word_str)
解决此任务的更好方法:
您尝试编写的代码已经有了使用python的解决方案-替换某些内容,dict
很好,因为您将键映射到值。对于字符串,甚至还有一些便利函数可以为您构建字典:
阅读:
如果查找中不存在字符,则按原样使用(空格)。
keyboard_characters = "qwertyuiopasdfghjkl;zxcvbnm,./"
# create replace dicts
# this mapps around - / is "before" q and q is "after" /
forward = str.maketrans(keyboard_characters,
keyboard_characters[1:] + keyboard_characters[0])
backward = str.maketrans(keyboard_characters,
keyboard_characters[-1] + keyboard_characters[:-1])
word_original = input()
forw = word_original.translate(forward)
back = word_original.translate(backward)
print(word_original, forw, back, sep="\n\n")
输出:
# original text
some text with ;and / in it
# forward
dp,r yrcy eoyj zsmf q om oy
# backward
ainw rwzr qurg lpbs . ub ur