此代码翻转除第一个和最后一个字符之外的单词中的所有字符。如何制作它以便它只是随机翻转除了第一个和最后一个字符之外的两个字符?
例如:
computers
cmoputers
comupters
compuetrs
代码:
def scramble(word):
result = word[0]
if len(word) > 1:
for i in range(len(word) - 2, 0, -1):
result += word[i]
result += word[len(word) - 1]
return result
def main():
print ("scrambled interesting python computers")
print scramble("scrambled"),scramble("interesting"),scramble("python"), scramble("computers")
main()
答案 0 :(得分:1)
尝试查看此代码是否适合您:
ind1
请注意,如果ind2
恰好等于update
,则可能没有切换。如果这不是傻瓜,你应该检查这种情况。
答案 1 :(得分:1)
这应该可以翻转两个字母。如果单词的长度小于或等于3,则不能翻转。在这种情况下,它只会返回单词。
from random import randint
def scramble(word):
if len(word) <= 3:
return word
word = list(word)
i = randint(1, len(word) - 2)
word[i], word[i+1] = word[i+1], word[i]
return "".join(word)
如果要切换两个随机字母,可以执行以下操作:
from random import sample
def scramble(word):
if len(word) <= 3:
return word
word = list(word)
a, b = sample(range(1, len(word)-1), 2)
word[a], word[b] = word[b], word[a]
return "".join(word)
答案 2 :(得分:0)
以下仅使用标准库。此外,它总是从字符串内部选择2个不同的字符。
import random
def scramble2(word):
indx = random.sample(range(1,len(word)-1), 2)
string_list = list(word)
for i in indx:
string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i]
return "".join(string_list)
另外,你需要处理len(word)&lt; = 3的情况:在这种情况下,random.sample方法会抛出一个ValueError,因为它没有足够的项来进行采样(它的样本没有替代品)。一种方法是在这些情况下返回单词。
def scramble2(word):
try:
indx = random.sample(range(1,len(word)-1), 2)
except ValueError:
return word
string_list = list(word)
for i in indx:
string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i]
return "".join(string_list)