列出变量的条目:ttk python

时间:2013-09-04 01:28:02

标签: python ttk

我试图在每次循环运行时将字符串的字母移过1(所以" A"变为" B"," B"每次都变成" C"等等。

我需要显示每个结果,以便我可以比较它们。我不想做但知道怎么做是创造了26个不同的功能,每个功能将字母移动一个字母更远,但这看起来有点荒谬。

每次while循环播放时如何为ttk分配变量?

我认为这会分配" ls"加上每个变量的计数(ls1,ls2,ls3 ......),但事实并非如此。它每次都会抛出一个错误。

def shift1(*args):
    s = code.get()
    storage = []
    count = 1
    while (count <= 26):
        l = [ord(i) for i in s]
        sh = ([chr(i + count) for i in l])
        storage.append(sh)
        ("ls"+str(count)).set(storage(count - 1))
        count += 1

它给我一个错误,说

  

属性错误:&#39; str&#39;对象没有属性&#39; set&#39;

就像我说的那样,每次分配一个diff ttk变量时,我可以使用这个函数26次。

def shift1(*args):
    s = code.get()
    l = [ord(i) for i in s]
    sh1.set(''.join([chr(i + 1) for i in l]))

这基本上会绕过循环,但我知道必须有更好的方法。 非常新的python和ttk所以任何帮助都很受欢迎。

2 个答案:

答案 0 :(得分:1)

这是一种旋转字符串中字符的方法,假设字符串中只有A-Z字母。

string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(10):
    string = "".join([chr((ord(letter) - ord('A') + 1) % 26 + ord('A')) for letter in string])
    print string

这个想法是每个字母与字母A的ASCII码差异。因此字母A为0,字母B为1.当字母Z向前移动时,它需要返回到A.这是modulo(%)进来,如果需要,它会将字母Z移回A.

输出:

BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ

答案 1 :(得分:1)

您不需要使用while循环,只需使用for循环进行迭代即可。与Bemmu的答案一样,这会强制字符全部为大写,因为它更容易。但是你可以稍微修改一下,以便根据大写或小写字符进行检查。

def shift(str):
    str =str.upper()
    for i in range(26):

        print "".join([chr((ord(x)-65+i)%26+65) for x in str])

shift("hello")

您可以在此处查看此操作:http://codepad.org/OaBXM4s2