我试图让用户在变量中输入两个名字。这些变量将与scramble-function混合使用。然后我想让它们再次与解密函数分开,但是我希望解读函数能够识别出哪两个单词是第一个输入,哪个是第二个输入.. 但是我坚持使用范围和不知道如何正确解决这个问题。
我感谢任何解决方案!
<button type="button" class="close" data-close="alert"></button>
答案 0 :(得分:1)
在
if len(word1) > len(word2):
a1 = word1
a2 = word2
else:
a1 = word2
a2 = word1
原始订单丢失。如果没有这个,重建订单非常容易,因为scramble
函数总是将第一个单词的第一个字母放在首位。
然后更改您的unscramble
功能以返回word1, word2
,然后按原始顺序返回字词。
顺便说一下,你应该看看itertools.zip_longest()
。它会使您的scramble
函数更易于阅读。
for char1, char2 in itertools.zip_longest(word1, word2, fillvalue='0')
遍历两个单词中的所有字母,并使用'0'
代替短字中的缺失字母。
答案 1 :(得分:1)
你永远不会摆脱a
或b
,所以你可以用它们来知道哪个词是第一个,哪个是第二个。没有必要手动解读它们。我会在scramble
之后使用元组来存储它们,而不是:
magicWord = scramble(a,b)
我会这样做:
magicWord_tuple = (a, b, scramble(a,b))
然后你只需要在你需要的时候拿出你想要的任何一个词。
firstword = magicWord_tuple[0]
secondword = magicWord_tuple[1]
magicword = magicWord_tuple[2]
答案 2 :(得分:0)
对不起,但你的解读功能无法再恢复这些词,更不用说先说出哪一个了。您已经破坏了争夺功能中的信息。
在争夺中,你的前几行破坏了排序;因为你再也没有引用word1和word2(顺序的唯一指标),所以信息丢失了。也许您会想要使用不同的分隔符(在其中插入&#34; 0&#34;)来表示哪个单词是哪个。这种插入将让解读程序区分开来。
if len(word1) > len(word2):
a1, a2 = word1, word2
sep = '1'
else:
a1, a2 = word2, word1
sep = '2'
...
else:
magicWord += sep
我们可以做更多的其他编码改进,以及更多&#34; Pythonic&#34;,但我们现在正在做功能;代码审查进入另一个小组。
答案 3 :(得分:0)
也许你可以有一个额外的变量,说明哪个词首先在魔术词中输入,并将此变量传递给解码函数以进行单词的分离。你可以改变这样的争夺词:
if len(word1) > len(word2):
flag = 1
a1 = word1
a2 = word2
else:
flag = -1
a1 = word2
a2 = word1
...
return magicWord, flag
并且解密将使flag
恢复正确的单词顺序。这是唯一的解决方案,因为当您创建魔术词时,您会丢失有关哪个是第一个词以及哪个是第二个词的信息。这意味着如果没有此信息,您的解密功能将无法运行。