views:

78

answers:

2

I need to make a tv that shows the user the channel and the volume, and shows whether or not the television is on. I have the majority of the code made, but for some reason the channels won't switch. I'm fairly unfamiliar with how properties work, and I think that's what my problem here is. Help please.

class Television(object):

    def __init__(self, __channel=1, volume=1, is_on=0):
        self.__channel=__channel
        self.volume=volume
        self.is_on=is_on

    def __str__(self):
        if self.is_on==1:
            print "The tv is on"
            print self.__channel
            print self.volume
        else:
            print "The television is off."

    def toggle_power(self):
        if self.is_on==1:
            self.is_on=0
            return self.is_on
        if self.is_on==0:
            self.is_on=1
            return self.is_on

    def get_channel(self):
        return channel

    def set_channel(self, choice):
        if self.is_on==1:
            if choice>=0 and choice<=499:
                channel=self.__channel
            else:
                print "Invalid channel!"
        else:
            print "The television isn't on!"

    channel=property(get_channel, set_channel)

    def raise_volume(self, up=1):
        if self.is_on==1:
            self.volume+=up
            if self.volume>=10:
                self.volume=10
                print "Max volume!"
        else:
            print "The television isn't on!"

    def lower_volume(self, down=1):
        if self.is_on==1:
            self.volume-=down
            if self.volume<=0:
                self.volume=0
                print "Muted!"
        else:
            print "The television isn't on!"

def main():

    tv=Television()
    choice=None
    while choice!="0":
        print \
        """
        Television

        0 - Exit
        1 - Toggle Power
        2 - Change Channel
        3 - Raise Volume
        4 - Lower Volume
        """

        choice=raw_input("Choice: ")
        print

        if choice=="0":
            print "Good-bye."

        elif choice=="1":
            tv.toggle_power()
            tv.__str__()

        elif choice=="2":
            change=raw_input("What would you like to change the channel to?")
            tv.set_channel(change)
            tv.__str__()

        elif choice=="3":
            tv.raise_volume()
            tv.__str__()

        elif choice=="4":
            tv.lower_volume()
            tv.__str__()

        else:
            print "\nSorry, but", choice, "isn't a valid choice."

main()

raw_input("Press enter to exit.")
+5  A: 
  1. The channel number is integer, but raw_input returns string. Should be:

    change = int(raw_input("What would you like to change the channel to?"))
    
  2. also your set_channel function has this:

    channel=self.__channel
    

    When it should be:

    self.__channel = choice
    

Those two changes make it work.

nosklo
+2  A: 
nosklo