变量接收多个值


import os, smtplib, time
class coupons:
    def __init__(expiration_min, expiration_hour, time_of, expiration_day,
                 expiration_month, expiration_year, today_min, today_hour,
                 today_day, today_month, today_year, validity,
                 address, password, keyword, sent):
        """__init__ function"""
        self.all_months_long = ["January", "February", "March",
                                "April", "May", "July", "August",
                                "September", "October", "November", "December"]
        self.all_months_short = ["Jan", "Feb", "Mar", "Apr",
                                 "May", "Jun", "Jul", "Aug",
                                 "Sep", "Oct", "Nov", "Dec"]
        self.expiration_min = expiration_min
        self.expiration_hour = expiration_hour
        self.time_of = time_of
        self.expiration_day = expiration_day
        self.expiration_month = expiration_month
        self.expiration_year = expiration_year
        self.today_min = today_min
        self.today_hour = today_hour
        self.today_day = today_day
        self.today_month = today_month
        self.today_year = today_year
        self.validity = validity
        self.address = address
        self.password = password
        self.keyword = keyword
        self.sent = sent
    def getExpirationMonth(self):
        """Get expiration month"""
        try:
            index = self.all_months_long.index(self.expiration_month)
            index += 1
        except ValueError:
            try:
                index = self.all_months_short.index(self.expiration_month)
                index += 1
            except ValueError:
                print("nThat is not a month.")
                time.sleep(1)
                os.system('cls')
                coupons.getExpirationMonth(self)
            else:
                self.expiration_month = index
                self.expiration_month = int(self.expiration_month)
        else:
            self.expiration_month = index
            self.expiration_month = int(self.expiration_month)
    def correctExpirationMin_value(self):
        """Corrects expiration_min value"""
        try:
            self.expiration_min = int(self.expiration_min)
        except ValueError or TypeError:
            if self.expiration_min == "none":
                pass
            else:
                os.system('cls')
                self.expiration_min = input("Enter minute: ")
                coupons.correctExpirationMin_value(self)
        else:
            pass
    def correctExpirationHour_value(self):
        """Corrects expiration_hour value"""
        try:
            self.expiration_hour = int(self.expiration_hour)
        except ValueError or TypeError:
            if self.expiration_hour == "none":
                pass
            else:
                os.system('cls')
                self.expiration_hour = input("Enter hour: ")
                coupons.correctExpirationHour_value(self)
        else:
            pass
    def correctExpirationHour_time(self):
        """Corrects expiration_hour"""
        if self.expiration_min == "none" and self.expiration_hour == "none":
            self.time_of = None
        elif self.expiration_hour != "none":
            if self.time_of == "AM":
                pass
            elif self.time_of == "PM":
                self.expiration_hour += 12
            else:
                print("Please enter AM or PM")
                time.sleep(1)
                os.system('cls')
                self.time_of = input("AM or PM: ")
                os.system('cls')
                coupons.correctExpirationHour(self)
        else:
            pass
        if self.expiration_hour == 12:
            if self.time_of == "AM":
                self.expiration_hour = 0
    def getUserMessage(self):
        print("If you would like to receive an email",
              "when your coupon expires, leave this",
              "program running. Thank you!")
    def testCoupon_date(self):
        """Evaluates expiration information"""
        if (self.today_year > self.expiration_year):
            self.validity = False
        elif (self.today_year == self.expiration_year):
            if (self.today_month > self.expiration_month):
                self.validity = False
            elif (self.today_month == self.expiration_month):
                if (self.today_day > self.expiration_day):
                    self.validity = False
                elif (self.today_day == self.expiration_day):
                    if (self.expiration_hour == "none"):
                        self.validity = False
                    elif (self.expiration_min == "none"):
                        self.validity = False
                    else:
                        if (self.today_hour > self.expiration_hour):
                            self.validity = False
                        elif (self.today_hour == self.expiration_hour):
                            if (self.today_min > self.expiration_min):
                                self.validity = False
                            elif (self.today_min == self.expiration_min):
                                print("This coupon expires this minute.")
                                self.validity = True
                            else:
                                print("This coupon is still valid.")
                                self.validity = True
                                coupons.getUserMessage(self)
                        else:
                            print("This coupon is still valid.")
                            self.validity = True
                            coupons.getUserMessage(self)
                else:
                    print("This coupon is still valid.")
                    self.validity = True
                    coupons.getUserMessage(self)
            else:
                print("This coupon is still valid.")
                self.validity = True
                coupons.getUserMessage(self)
        else:
            print("This coupon is still valid.")
            self.validity = True
            coupons.getUserMessage(self)
        if (self.validity == False):
            print("This coupon has expired.")
    def waitForExpiration(self):
        if self.sent is True:
            exit(None)
        self.today_min = getattr(time.localtime(time.time()), "tm_min")
        self.today_hour = getattr(time.localtime(time.time()), "tm_hour")
        self.today_day = getattr(time.localtime(time.time()), "tm_mday")
        self.today_month = getattr(time.localtime(time.time()), "tm_mon")
        self.today_year = getattr(time.localtime(time.time()), "tm_year")
        if self.today_year == self.expiration_year:
            if self.today_month == self.expiration_month:
                if self.today_day == self.expiration_day:
                    if self.today_hour != "none":
                        if self.today_hour == self.expiration_hour:
                            if self.today_min != "none":
                                if self.today_min == self.expiration_min:
                                    coupons.createList(self)
                                    coupons.email_createMessage(self, val="Your coupon has expired.")
                                    self.sent = True
                                    coupons.waitForExpiration(self)
                                elif ((self.today_min+5) == self.expiration_min):
                                    coupons.createList(self)
                                    coupons.email_createMessage(self, val="Your coupon expires in 5 minutes!")
                                    coupons.waitForExpiration(self)
                                elif ((self.today_min+1) == self.expiration_min):
                                    coupons.createList(self)
                                    coupons.email_createMessage(self, val="Your coupon expires in 1 minute!")
                                    coupons.waitForExpiration(self)
                                else:
                                    pass
                            else:
                                coupons.waitForExpiration(self)
                        else:
                            coupons.createList(self)
                            coupons.email_createMessage(self, val="Your coupon expires in 1 hour.")
                            coupons.waitForExpiration(self)
                    else:
                        coupons.waitForExpiration(self)
                else:
                    coupons.createList(self)
                    coupons.email_createMessage(self, val="Your coupon expires in 1 day.")
                    coupons.waitForExpiration(self)
            else:
                coupons.waitForExpiration(self)
        else:
            coupons.waitForExpiration(self)
    # This is the beginning of the email functions
    def createList(self):
        global message
        message = []
    def email_createMessage(self, val):
        """Adds previous input to self.message"""
        global message
        message.append(val)
        coupons.email_checkMessage(self)
    def email_checkMessage(self):
        """Sees if self.keyword is in self.message"""
        global message
        try:
            index = message.index(self.keyword)
        except ValueError:
            coupons.email_createMessage(self, val=self.keyword)
        else:
            del message[index]
            coupons.email_transformMessage(self)
    def email_transformMessage(self):
        """Joins all elements of self.message"""
        global message
        message = ' '.join(message[0 : len(message)])
        coupons.email_sendMessage(self)
    def email_sendMessage(self):
        """Sends message"""
        global message
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.starttls()
        server.login(self.address, self.password)
        server.sendmail(self.address, self.address, message)
        server.quit()
    def main():
        user = coupons(expiration_min = input("Enter minute n(Enter 'none' if there is no minute): "),
                       expiration_hour = input("Enter hour n(Enter 'none' if there is no hour): "),
                       time_of = input("AM or PM: "),
                       expiration_day = int(input("Enter day: ")),
                       expiration_month = input("Enter month: "),
                       expiration_year = int(input("Enter year: ")),
                       today_min = getattr(time.localtime(time.time()), "tm_min"),
                       today_hour = getattr(time.localtime(time.time()), "tm_hour"),
                       today_day = getattr(time.localtime(time.time()), "tm_mday"),
                       today_month = getattr(time.localtime(time.time()), "tm_mon"),
                       today_year = getattr(time.localtime(time.time()), "tm_year"),
                       validity = False,
                       address = input("Enter your email: "),
                       password = input("Enter your password: "),
                       keyword = input("Enter a keyword: "), sent=False)
        user.correctExpirationMin_value()
        user.correctExpirationHour_value()
        user.correctExpirationHour_time()
        user.getExpirationMonth()
        user.testCoupon_date()
        user.waitForExpiration()
coupons.main()

当我运行这个,这是结果错误:TypeError: init()获得参数'expiration_min'的多个值

我能得到一些帮助来解决这个问题吗?我不知道它是如何接收多个值的。我把代码检查了三遍,还是没弄明白。感谢所有的帮助!谢谢你!

尝试使用rstrip()

从用户输入中剥离换行符
expiration_min = input("Enter minute n(Enter 'none' if there is no minute): ").rstrip(),
expiration_hour = input("Enter hour n(Enter 'none' if there is no hour): ").rstrip(),

最新更新