Skip to main content
 首页 » 编程设计

Python之为什么这个 for 循环只打印 1 个字母

2025年05月04日11wayfarer

def caesar(plaintext,shift):   
    alphabet=["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"]   
 
    #Create our substitution dictionary   
    dic={}   
    for i in range(0,len(alphabet)):   
        dic[alphabet[i]]=alphabet[(i+shift)%len(alphabet)]   
 
    #Convert each letter of plaintext to the corrsponding   
    #encrypted letter in our dictionary creating the cryptext   
    ciphertext=("")   
    for l in plaintext.lower():   
            if l in dic:   
                l=dic[l]   
                ciphertext+=l 
            return ciphertext   
 
#Example useage   
plaintext="the cat sat on the mat"   
print "Plaintext:", plaintext   
print "Cipertext:", (caesar(plaintext,29))  

密文只打印一个字母,而不是在 caesar shift 中打印“明文”变量。我想让它打印整个句子。

谢谢

请您参考如下方法:

这是因为你的return ciphertext缩进错了。您从 for 循环的第一次迭代返回。 (缩进在 Python 中很重要!)

    for l in plaintext.lower():   
            if l in dic:   
                l=dic[l]   
                ciphertext+=l 
            return ciphertext  # Indented to match level of `if`. 

修复它。

    for l in plaintext.lower():   
        if l in dic:   
            l=dic[l]   
            ciphertext+=l 
    return ciphertext 

几个指针

  1. 您可以设置alphabets = string.ascii_lowercase,而不是列出代码中的所有字母表。
  2. 您不需要变量来存储dic[l],只需执行ciphertext += dic[l]即可。