Hi,
The following code (BLOCK 1) is intended to simulate a television by creating it as an object, and is it stands I am pretty happy with it. Having created a volume control however, I then wanted to add a brightness and contrast control. My first attempt at doing this involved adding a contrast_adjust() method, and a brightness_adjust() method. This entailed copying the volume_adjust() method and substituting the word "volume" with "contrast" or "brightness" wherever needed. As you can imagine however this led to a lot of duplication, so I set about creating a single adjust() method which could be used to adjust all 3 controls (see BLOCK 3 for how I tried to do this). Unfortunately this doesn't work - python won't let me pass a value (e.g. "volume") to the adjust method and then let this value be used as the PROPERTY attribute (if you see what I mean). Can anyone see a way around this?
CODE BLOCK 1.
# Creating a television
class Television(object):
"""A virtual televsion"""
def __init__(self, volume = 20, channel = 1):
self.volume = volume
self.channel = channel
def change_channel(self, number):
if number > 5:
print "Channel not available"
else:
self.channel = number
print "You are now watching channel", self.channel
def volume_adjust(self):
print "-\tVolume (", self.volume, ")\t +"
adjust = raw_input("")
while adjust == "+" or adjust == "-":
if adjust == "+":
self.volume += 1
else:
self.volume -= 1
if self.volume < 0:
self.volume = 0
elif self.volume > 20:
self.volume = 20
else:
pass
print "-\tVolume (", self.volume, ")\t +"
adjust = raw_input("")
def remote():
print """
_____________
| |
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
| |
| |V|olume |
| |C|ontrast |
| |B|rightness |
| |
| + - |
| |
--------------
"""
def main():
tele = Television()
remote()
remote_control = raw_input("Make your choice: ")
while remote_control != "x":
try:
if int(remote_control) in range(1, 101):
tele.change_channel(int(remote_control))
except(ValueError):
if (remote_control) == "v":
tele.volume_adjust()
else:
pass
remote()
remote_control = raw_input("Make your choice: ")
print "Television now on standby."
main()
CODE BLOCK 2:
CODE BLOCK 3:
class Television(object):
"""A virtual televsion"""
def __init__(self, volume = 20, brightness = 20, contrast = 20, channel = 1):
self.volume = volume
self.channel = channel
self.brightness = brightness
self.contrast = contrast
def change_channel(self, number):
if number > 5:
print "Channel not available"
else:
self.channel = number
print "You are now watching channel", self.channel
def vol(self):
print "-\tVolume (", self.volume, ")\t +"
self.adjust("volume")
def bright(self):
print "-\tBrightness (", self.brightness, ")\t +"
self.adjust("brightness")
def contr(self):
print "-\tContrast (", self.contrast, ")\t +"
self.adjust("Contrast")
def adjust(self, PROPERTY):
print self.PROPERTY
adjust = raw_input("")
while adjust == "+" or adjust == "-":
if adjust == "+":
self.PROPERTY += 1
else:
self.PROPERTY -= 1
if self.PROPERTY < 0:
self.PROPERTY = 0
elif self.PROPERTY > 20:
self.PROPERTY = 20
else:
pass
print "-\t", PROPERTY, self.PROPERTY, ")\t +"
adjust = raw_input("")