2016-12-05 52 views
0

我定义如下:在Python中调用列表中的特定对象?

class SMSMessage(object): 

    def __init__(self, hasBeenRead, messageText, fromNumber): 
     self.hasBeenRead = hasBeenRead 
     self.messageText = messageText 
     self.fromNumber = fromNumber 

hasBeenRead = "False" 
fromNumber = "07189202003" 

具有以下功能:

def MarkAsRead(self): 
    if hasBeenRead == "False": 
     return hasBeenRead == "True" 

def add_sms(): 
    sms1 = (hasBeenRead, messageText, fromNumber) 
    return SMSStore.append(sms1) 

def get_count(): 
    return len(SMSStore) 

def get_message(i): 
    for i in SMSStore: 
    return messageText 

def get_unread_messages(i): 
    for i in SMSStore: 
     if hasBeenRead == "False": 
      return messageText 

这是SMS仿真,其中用户是指将消息发送到一个列表中的逻辑(SMSStore [ ]),然后从列表中召回的具体信息:

userChoice = "" 

while userChoice != "quit": 
    userChoice = raw_input("What would you like to do - read/send/quit?") 

    if userChoice == "read": 
     unreadChoice = raw_input("Would you like to retrieve all unread messages or one of your own choice? - all unread/custom ") 

     if unreadChoice == "custom": 
      messageNo = int(raw_input("Please enter which messsage number you want to read: ")) 
      print get_message(messageNo) 
      print MarkAsRead(messageNo) 


     elif unreadChoice == "all unread": 
      print get_unread_messages(hasBeenRead) 

     else: 
      print "incorrect entry" 

    elif userChoice == "send": 
     messageText = raw_input('Please type in your message') 
     add_sms() 

     print SMSStore 

我的主要问题是,我能够在(hasBeenRead,MessageText中,fromNumber)发送到SMSSto但当试图阅读我似乎无法返回用户选择messageNo的消息文本。它总是返回列表中最后一项的messageText。我仍然不熟悉编码,所以任何帮助将不胜感激。

感谢

+1

有一些东西在这里没有任何意义,我不知道你是否不熟悉OOP。例如,除了定义全局'hasBeenRead'和'fromNumber'变量之外,您的第一个代码段不做任何事情;它不会创建实例或将这些值传递给任何内容。在其他地方,你不用通过'self.hasBeenRead'等实例来引用属性(另外,你应该真正使用布尔值 - 'True'和'False' - 不是字符串'True'和'False' ')。 –

+0

感谢您的布尔提示。让我发布实际的任务问题,你可以告诉我一个更好的策略或方法?如前所述,我仍然是一个noob,但尽我所能:)。 – Zambo004

+0

为具有三个变量的SMSMessage创建类定义:hasBeenRead,messageText和fromNumber。 ●构造函数应初始化发件人的编号。 ●构造函数还应该将hasBeenRead初始化为false。 ●在此类中创建一个名为MarkAsRead的方法,该方法应该将hasBeenRead更改为true。 ●创建一个名为SMSStore的列表,用作收件箱。 ●然后创建以下方法: – Zambo004

回答

0

我不知道什么是SMSStore的作用,但是这个代码块看起来可疑对我说:

def get_message(i): 
    for i in SMSStore: 
    return messageText 

你为什么迭代SMSStore只是返回MessageText中?那会是一个失踪的缩影吗?

+0

如果缩进未正确复制,则表示抱歉。 SMSStore是一个列表,用于存储当用户选择发送时添加到列表中的消息。然后我需要能够通过该函数调用所需用户输入的messageText。 – Zambo004

+0

为具有三个变量的SMSMessage创建类定义:hasBeenRead,messageText和fromNumber。 ●构造函数应初始化发件人的编号。 ●构造函数还应该将hasBeenRead初始化为false。 ●在此类中创建一个名为MarkAsRead的方法,该方法应将 hasBeenRead更改为true。 ●创建一个名为SMSStore的列表,用作收件箱。 ●然后创建以下方法: – Zambo004

+0

○add_sms - 将接收到的短信中的文本和数字接收到 以创建一个新的SMSMessage对象。 ○get_count - 返回商店中消息的数量。 ○get_message - 返回列表中消息的文本。为此,允许 用户输入索引,即GetMessage(i)返回列表中位置i处存储在 处的消息。一旦完成,hasBeenRead现在应该为 为真。 ○get_unread_messages - 应该返回所有没有被读取的消息的列表 。 ○删除 - 删除SMSStore中的消息。 – Zambo004