Coding style 如何以更优雅的方式解决这个Python难题?
我正在研究CoderByte的“Python”问题。时间是至关重要的,因此代码可能不是真正可读的,而是非常直接的。我会对你的方法感兴趣。我的代码适用于某些单词,但使用“句子”进行测试会得到不同的结果,在我们说话时进行调试。请评论我的想法 问题:Coding style 如何以更优雅的方式解决这个Python难题?,coding-style,python,Coding Style,Python,我正在研究CoderByte的“Python”问题。时间是至关重要的,因此代码可能不是真正可读的,而是非常直接的。我会对你的方法感兴趣。我的代码适用于某些单词,但使用“句子”进行测试会得到不同的结果,在我们说话时进行调试。请评论我的想法 问题: def LetterChanges(str): a = map(chr, range(97, 123)) b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
def LetterChanges(str):
a = map(chr, range(97, 123))
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
b.remove('a')
b.append('a')
c = dict(zip(a,b))
v = ['a', 'e', 'i', 'o', 'u']
k = str
for i in range(len(str)):
if str[i] in a:
k = k.replace(str[i], c[str[i]])
l = k
for i in range(len(k)):
if k[i] in v:
l = l.replace(k[i], k[i].upper())
print l
# this call is needed to test your function
# keep this when you submit your code
LetterChanges(str)
zddzst -> AEEAUU {wrong}!
sentence -> UfOUfOdf {wrong}!
让函数LetterChanges(str)获取要传递的str参数,并使用以下算法对其进行修改。用字母表中紧跟其后的字母替换字符串中的每个字母(即c变为d,z变为a)。然后将这个新字符串(a、e、i、o、u)中的每个元音大写,最后返回这个修改后的字符串。使用下面框中的参数测试功能,使用不同的参数测试代码。不要在代码中修改函数名。不要将任何代码放在函数外,并使用return关键字从函数内返回答案
我的代码:
def LetterChanges(str):
a = map(chr, range(97, 123))
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
b.remove('a')
b.append('a')
c = dict(zip(a,b))
v = ['a', 'e', 'i', 'o', 'u']
k = str
for i in range(len(str)):
if str[i] in a:
k = k.replace(str[i], c[str[i]])
l = k
for i in range(len(k)):
if k[i] in v:
l = l.replace(k[i], k[i].upper())
print l
# this call is needed to test your function
# keep this when you submit your code
LetterChanges(str)
zddzst -> AEEAUU {wrong}!
sentence -> UfOUfOdf {wrong}!
输出:
def LetterChanges(str):
a = map(chr, range(97, 123))
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
b.remove('a')
b.append('a')
c = dict(zip(a,b))
v = ['a', 'e', 'i', 'o', 'u']
k = str
for i in range(len(str)):
if str[i] in a:
k = k.replace(str[i], c[str[i]])
l = k
for i in range(len(k)):
if k[i] in v:
l = l.replace(k[i], k[i].upper())
print l
# this call is needed to test your function
# keep this when you submit your code
LetterChanges(str)
zddzst -> AEEAUU {wrong}!
sentence -> UfOUfOdf {wrong}!
我会用这个,它可能看起来像这样:
import string
def LetterChanges(s):
orig = string.letters
new = string.ascii_lowercase[1:] + 'a' + string.ascii_uppercase[1:] + 'A'
for vowel in 'aeiou':
new = new.replace(vowel, vowel.upper())
table = string.maketrans(orig, new)
return s.translate(table)
import string
def LetterChanges(s):
t = string.maketrans('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA')
return s.translate(t)
例如:
>>> LetterChanges('sentence')
'tfOUfOdf'
为了提高效率,我将把表的创建移到函数外部,以便只计算一次,而不是每次函数调用时。或者,只需硬编码orig
和new
的结束值,如下所示:
import string
def LetterChanges(s):
orig = string.letters
new = string.ascii_lowercase[1:] + 'a' + string.ascii_uppercase[1:] + 'A'
for vowel in 'aeiou':
new = new.replace(vowel, vowel.upper())
table = string.maketrans(orig, new)
return s.translate(table)
import string
def LetterChanges(s):
t = string.maketrans('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA')
return s.translate(t)
编辑:这里有一个版本应该可以使用coderbytes限制:
def LetterChanges(s):
orig = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
new = 'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA'
result = ''
for c in s:
if c in orig:
c = new[orig.index(c)]
result += c
return result
我会用这个,它可能看起来像这样:
import string
def LetterChanges(s):
orig = string.letters
new = string.ascii_lowercase[1:] + 'a' + string.ascii_uppercase[1:] + 'A'
for vowel in 'aeiou':
new = new.replace(vowel, vowel.upper())
table = string.maketrans(orig, new)
return s.translate(table)
import string
def LetterChanges(s):
t = string.maketrans('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA')
return s.translate(t)
例如:
>>> LetterChanges('sentence')
'tfOUfOdf'
为了提高效率,我将把表的创建移到函数外部,以便只计算一次,而不是每次函数调用时。或者,只需硬编码orig
和new
的结束值,如下所示:
import string
def LetterChanges(s):
orig = string.letters
new = string.ascii_lowercase[1:] + 'a' + string.ascii_uppercase[1:] + 'A'
for vowel in 'aeiou':
new = new.replace(vowel, vowel.upper())
table = string.maketrans(orig, new)
return s.translate(table)
import string
def LetterChanges(s):
t = string.maketrans('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA')
return s.translate(t)
编辑:这里有一个版本应该可以使用coderbytes限制:
def LetterChanges(s):
orig = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
new = 'bcdEfghIjklmnOpqrstUvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZA'
result = ''
for c in s:
if c in orig:
c = new[orig.index(c)]
result += c
return result
您可以尝试以下方法:
sentence = <your sentence>
c = <your alphabet mapping>
v = <vowels>
def letterMap(x):
letter = c[x]
if letter in v:
return letter.upper()
else:
return letter
letterList = map(letterMap, sentence)
answer = "".join(letterList)
句子=
c=
v=
def字母地图(x):
字母=c[x]
如果字母为v:
回信。上()
其他:
回信
字母列表=地图(字母地图,句子)
答案=“加入(信单)
您可以尝试以下方法:
sentence = <your sentence>
c = <your alphabet mapping>
v = <vowels>
def letterMap(x):
letter = c[x]
if letter in v:
return letter.upper()
else:
return letter
letterList = map(letterMap, sentence)
answer = "".join(letterList)
句子=
c=
v=
def字母地图(x):
字母=c[x]
如果字母为v:
回信。上()
其他:
回信
字母列表=地图(字母地图,句子)
答案=“加入(信单)
这只是另一种解决方案
def LetterChanges(letters):
"""
>>> LetterChanges('abcd')
'bcdE'
>>> LetterChanges('ABCD')
'BCDE'
>>> LetterChanges('sentence')
'tfOUfOdf'
"""
letter_map = {}
changed_letters = []
for old_letter in letters:
if old_letter in letter_map:
new_letter = letter_map[old_letter]
else:
ordinal = ord(old_letter)
if 65 <= ordinal <= 90: # ord('A'), ord('Z')
new_letter = chr((ordinal - 64) % 26 + 65)
elif 97 <= ordinal <= 122: # ord('a'), ord('z')
new_letter = chr((ordinal - 96) % 26 + 97)
else:
new_letter = old_letter
if new_letter in 'aeiou':
new_letter = new_letter.upper()
letter_map[old_letter] = new_letter
changed_letters.append(new_letter)
return ''.join(changed_letters)
def字母更改(字母):
"""
>>>字母变化('abcd')
“bcdE”
>>>字母变化('ABCD')
“BCDE”
>>>字母变化(“句子”)
“tfOUfOdf”
"""
字母_map={}
更改的字母=[]
对于字母中的旧字母:
如果字母地图中有旧字母:
新字母=字母地图[旧字母]
其他:
序号=ord(旧字母)
如果65只是另一种解决方案
def LetterChanges(letters):
"""
>>> LetterChanges('abcd')
'bcdE'
>>> LetterChanges('ABCD')
'BCDE'
>>> LetterChanges('sentence')
'tfOUfOdf'
"""
letter_map = {}
changed_letters = []
for old_letter in letters:
if old_letter in letter_map:
new_letter = letter_map[old_letter]
else:
ordinal = ord(old_letter)
if 65 <= ordinal <= 90: # ord('A'), ord('Z')
new_letter = chr((ordinal - 64) % 26 + 65)
elif 97 <= ordinal <= 122: # ord('a'), ord('z')
new_letter = chr((ordinal - 96) % 26 + 97)
else:
new_letter = old_letter
if new_letter in 'aeiou':
new_letter = new_letter.upper()
letter_map[old_letter] = new_letter
changed_letters.append(new_letter)
return ''.join(changed_letters)
def字母更改(字母):
"""
>>>字母变化('abcd')
“bcdE”
>>>字母变化('ABCD')
“BCDE”
>>>字母变化(“句子”)
“tfOUfOdf”
"""
字母_map={}
更改的字母=[]
对于字母中的旧字母:
如果字母地图中有旧字母:
新字母=字母地图[旧字母]
其他:
序号=ord(旧字母)
如果65这是我的解决方案,通过所有病例。主要部分是使用chr和ord来回转换字母和数字,以便将当前字母替换为下一个字母
def LetterChanges(strParam):
# code goes here
result = ''
for letter in strParam:
if letter.isalpha():
if letter != 'z':
letter = chr(ord(letter)+1)
else:
letter = 'a'
result+=letter
result = ''.join(c.upper() if c in 'aeiou' else c for c in result)
return result
这是我的解决方案,通过了所有案例。主要部分是使用chr和ord来回转换字母和数字,以便将当前字母替换为下一个字母
def LetterChanges(strParam):
# code goes here
result = ''
for letter in strParam:
if letter.isalpha():
if letter != 'z':
letter = chr(ord(letter)+1)
else:
letter = 'a'
result+=letter
result = ''.join(c.upper() if c in 'aeiou' else c for c in result)
return result
string.lowercase
是你的朋友。“时间至关重要”让我猜猜。。。这是因为如果有人很快给你正确答案,你会得到更多的分数吗?我已经提交了代码!现在修改我的解决方案,因为我的解决方案看起来很愚蠢。如果我是为了得分而解决这个问题,我就不会发布这个,并等待别人回答!我说“时间至关重要”是为了阻止对我草率代码的评论!输入字符串是否完全小写?“shift”操作必须遵守大小写吗?输入字符串可以是任何内容,例如:ASDZXSS++:*。Shift确实应该尊重cap.string。小写字母是你的朋友。“时间至关重要”让我猜猜。。。这是因为如果有人很快给你正确答案,你会得到更多的分数吗?我已经提交了代码!现在修改我的解决方案,因为我的解决方案看起来很愚蠢。如果我是为了得分而解决这个问题,我就不会发布这个,并等待别人回答!我说“时间至关重要”是为了阻止对我草率代码的评论!输入字符串是否完全小写?“shift”操作必须遵守大小写吗?输入字符串可以是任何内容,例如:ASDZXSS++:*。Shift确实应该尊重cap。它是coderbyte,我必须检查它是否支持import语句sorted()'给了我一个错误,zip(a,b)也给了我一个错误。它说未定义的模块没有对象“maketrans”。coderbyte是荒谬的。提供Python练习,但对语言进行中性化,因此您必须像编写Visual Basic一样对其进行编码……添加了一个应该适用于coderbyte的版本,我完全同意Ned对coderbyte的限制!很好!我想知道为什么CoderByte会这样做——让我们在不使用Python可怕的一行程序的情况下更加努力地工作?!它是coderbyte,我必须检查它是否支持导入语句sorted()'给了我一个错误,zip(a,b)也给了我一个错误。它说未定义的模块没有对象“maketrans”。coderbyte是荒谬的。提供Python练习,但对语言进行中性化,因此您必须像编写Visual Basic一样对其进行编码……添加了一个应该适用于coderbyte的版本,我完全同意Ned对coderbyte的限制!很好!我想知道为什么CoderByte会这样做——让我们在不使用令人敬畏的一行程序的情况下更加努力地工作