2014-02-11 183 views
-3

我的代码不工作,请帮忙!我在编程中有一个项目,我无法弄清楚。它给了我这个错误:Python代码给出错误

Traceback (most recent call last): 
    File "C:/Python27/breakingcodeccc.py", line 258, in <module> 
    decodeorencode() 
    File "C:/Python27/breakingcodeccc.py", line 14, in decodeorencode 
    encode() 
    File "C:/Python27/breakingcodeccc.py", line 61, in encode 
    for letters in secretmessage: 
    TypeError: 'bool' is not interable 

我试过一切都得到这个工作。当我推动解码它只是重复,当我编码它甚至不会编码。顺便说一句,我是个新手。

print "Hey there user" 
global message 

def decodeorencode(): 
    valid_answer = False 
    while valid_answer == False: 

     message = str(raw_input('would you like to encode or decode? ')) 
     if message.lower() == "encode" : 
      encode() 
     elif message.lower() == "decode": 
      print "We will now decode your message!" 
      response = str(raw_input('do you know the key? ')) 
      if response in (['yes', 'Yes', 'y', 'Y']): 
       decode() 
      elif response in (['no', 'No', 'n', 'N']): 
       random_decode() 

alphabetupper = ['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'] 
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"] 
dmessage = [] 
emessage = [] 
rdmessage = [] 

def encode(): 
    print "We will now encode your message!" 
    secretmessage = str(raw_input("Please enter your message now.")) 
    valid_anwser = True 
    keyy = int(raw_input("Please pick a key between 1 to 26")) 
    secretmessage = secretmessage.isupper() 
    for letters in secretmessage: 
     one_letter = letters 

     if one_letter.isalpha() == True: 
      number = alphabetupper.index(one_letter) + keyy 
      if number <= 26: 
       letter = alphabetupper[number] 
       emessage.append(letter) 
       break 
      else: 
       letter = number % 26 
       letter = alphabetupper[letter] 
       emessage.append(letter) 
       break 

     elif letters.isalpha == False: 
      emessage.append(letters) 
      break 

     return emessage 

def decode(): 
    valid_answer = True 
    secretmessage = str(raw_input("Please enter your message now.")) 
    keyy = int(raw_input("Please pick a key between 1 to 26")) 
    keyy = - keyy 
    for letters in secretmessage: 

     if letters.isalpha()== True and letters.isupper() == True: 
      number = alphabetupper.index(letters)+ keyy 
      if number <= 26: 
       letter = alphabetupper[number] 
       dmessage.append(letter) 
       break 
      else: 
       letter = number%26 
       letter = alphabetupper[letter] 
       dmessage.append(letter) 
       break 

     elif letters.isalpha() == True and letters.islower() == True: 
      number = alphabet.index(letters) + keyy 
      if number <= 26: 
       letter = number 
       letter = alphabet [letter] 
       dmessage.append(letter) 
       break 
      else: 
       letter = number % 26 
       letter = alphabet[letter] 
       dmessage.append(letter) 
       break 

     elif letters.isalpha == False: 
      rdmessage.append(letter) 

    return dmessage 

def random_decode(): 
    valid_answer = True 
    secretmessage = str(raw_input("Please enter your message now.")) 
    valid_answer = False 
    keyy = 1 
    while valid_answer == False: 
     keyy = - keyy 
     for letters in secretmessage: 

      if letters.isalpha() == True and letters.isupper() == True: 
       number = alphabetupper.index(letters)+ keyy 
       if number <= 26: 
        letter = number 
        rdmessage.append(letter) 
        key += 1 
        break 
       else: 
        letter = number % 26 
        letter = alphabetupper[letter] 
        rdmessage.append(letter) 
        key += 1 
        break 

      elif letters.isalpha() == True and letters.islower() == True: 
       number = alphabet.index(letters)+ keyy 
       if number <= 26: 
        letter = number 
        rdmessage.append(letter) 
        key += 1 
        break 
       else: 
        letter = number % 26 
        letter = alphabet[letter] 
        rdmessage.append(letter) 
        key += 1 
        break 

      elif letters.isalpha == False: 
       rdmessage.append(letters) 

     return rdmessage 

decodeorencode() 

回答

1

这条线在这里

secretmessage = secretmessage.isupper() 

被转换邮件到一个布尔值(true或false),这是isupper()函数的返回。您可能只需要upper()将其转换为大写

1

错误消息告诉您到底发生了什么问题; secretmessage是一个布尔值(即TrueFalse),您无法遍历它。误差从该线茎:

secretmessage = secretmessage.isupper() 

str.isupper()返回TrueFalse。取而代之的是,你应该有:

secretmessage = secretmessage.upper() 
0

secretmessage.upper()不.isupper()isupper()是问一个问题,其答案是真的还是假的。

+0

实际上是'isupper()',而不是'isUpper()' –

+0

@brunodesthuilliers - 哎呀 - 被抓住 - 你是非常正确的。 :) – MinimalMaximizer

+0

非常感谢你! – user3298288