Python:无法正确返回函数范围内的变量

时间:2015-10-06 20:34:51

标签: python function for-loop scope return

我试图让用户在变量中输入两个名字。这些变量将与scramble-function混合使用。然后我想让它们再次与解密函数分开,但是我希望解读函数能够识别出哪两个单词是第一个输入,哪个是第二个输入.. 但是我坚持使用范围和不知道如何正确解决这个问题。

我感谢任何解决方案!

<button type="button" class="close" data-close="alert"></button>

4 个答案:

答案 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)

你永远不会摆脱ab,所以你可以用它们来知道哪个词是第一个,哪个是第二个。没有必要手动解读它们。我会在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恢复正确的单词顺序。这是唯一的解决方案,因为当您创建魔术词时,您会丢失有关哪个是第一个词以及哪个是第二个词的信息。这意味着如果没有此信息,您的解密功能将无法运行。