I am working on a very simple project that detects whether a letter is uppercase or lowercase and replaces it with a random letter that’s uppercase or lowercase like it while skipping spaces, so, for example, “Oh Boy” should output something like “Wx Dai”
But here’s the problem: When I call the check(letter) function, it always detects the letter as uppercase, so it always returns True, so, “Oh Boy” would output something like “WX DAI” when it shouldn’t…
How can I solve this issue?
import random
def check(letter):
if letter.isupper:
return True
if letter.islower:
return False
while 3 > 2:
command = list(input('message? '))
new_list = []
for letter in command:
if letter == ' ':
new_list.append(letter)
if letter != ' ':
if check(letter):
randomized_upper = random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
new_list.append(randomized_upper)
if not check(letter):
randomized_lower = random.choice('abcdefghijklmnopqrstuvwxyz')
new_list.append(randomized_lower)
output = ''.join(new_list)
print(output)
Advertisement
Answer
It should be letter.isupper() to invoke the function. By leaving off the parentheses it is evaluating to true because letter.isupper is defined (as a function) and functions always evaluate to boolean true in python’s dynamic typing. In fact, everything evaluates to true except 0, None, {}, [], False, (), and “”
https://docs.python.org/3/library/stdtypes.html#truth-value-testing