Python Forum
Python uppercase conversion conditions - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Python uppercase conversion conditions (/thread-26350.html)



Python uppercase conversion conditions - Jaypeng - Apr-29-2020

I'm currently trying to do a program related to Python uppercase conversion conditions.
1. If the length of a word is less than 7, it is not converted.
2. If the word length is more than 7, I want to convert the first vowel to upper case.

I ran the code according to the conditions I set, and the nameerror popped up like this
NameError: name 'newword' is not defined
I've certainly defined newword, but why am I getting same error?

input example)
what a beautiful world!
output example)
what a bEautiful world!

def Upper_Vowels(newword):
    sentence = input()
    newword = sentence.split()
    for i in range(len(newword)):
        if i >= 7 :
            def capital(sentence,vowel):
                vowels = 'aeiou'
                newsentence = []
                for word in sentence:
                    if word.lower() in vowels:
                        word = word.isupper()
                newsentence.append(newword)
                return ('[]'.join(newsentence))
                
    
if "__main__" == __name__:
    sentence = input()
    print(Upper_Vowels(newword))



RE: Python uppercase conversion conditions - bowlofred - Apr-29-2020

Your error message should have told you where it happened as well. In this case, you've defined (or assigned) newword within the Upper_Vowels function. But it's not defined outside.

You've tried to use that variable on line 18 where it is not in scope. Presumably you wanted to pass sentence to the function, not newword.


RE: Python uppercase conversion conditions - Jaypeng - Apr-29-2020

(Apr-29-2020, 07:01 AM)bowlofred Wrote: Your error message should have told you where it happened as well. In this case, you've defined (or assigned) newword within the Upper_Vowels function. But it's not defined outside.

You've tried to use that variable on line 18 where it is not in scope. Presumably you wanted to pass sentence to the function, not newword.


this is error message on line 18 where it happened

print(Upper_Vowels(newword))
NameError: name 'newword' is not defined


When I remove that character 'newword' from line 18,

print(Upper_Vowels())
then I got a typeerror on line 18, like this.
TypeError: Upper_Vowels() missing 1 required positional argument: 'newword'


RE: Python uppercase conversion conditions - bowlofred - Apr-29-2020

Right. You have to pass something.

But you just assigned sentence on the line before. I presume *that* is the variable you were intending to pass in.


RE: Python uppercase conversion conditions - Jaypeng - Apr-29-2020

Is this code what you mean?

def Upper_Vowels(newword):
    sentence = input()
    for i in range(len(newword)):
        if i >= 5 :
            def capital(sentence,vowel):
                vowels = 'aeiou'
                newsentence = []
                for word in sentence:
                    if word.lower() in vowels:
                        word = word.isupper()
                newsentence.append(newword)
                return ('[]'.join(newsentence))
                
    
if "__main__" == __name__:
    sentence = input()
    newword = sentence.split()
    print(Upper_Vowels(sentence))



RE: Python uppercase conversion conditions - bowlofred - Apr-29-2020

What is line 17 doing for you? You assign something to a variable and then never use it. It could be removed.

The section starting at line 5 is creating a new function. While it is possible to define a function inside another, you probably want to avoid that. Either keep the code you need in Upper_Vowels, or put it as a completely separate function (not nested inside this one). The way you have it, the function "capital" is created, but never called.


RE: Python uppercase conversion conditions - pyzyx3qwerty - Apr-29-2020

Try this:
first = input("Enter a sentence : ")
second = ""
vowels = ['a','e','i','o','u']
for i in first:
    if i in vowels:
        second += i.upper()
    else :
        second += i
print( second)
And output:
Output:
Enter a sentence : This is a test ThIs Is A tEst



RE: Python uppercase conversion conditions - jefsummers - Apr-29-2020

Your logic is kinda messed up.
Think of a function as a tool. Your main routine then uses that tool. To keep your tool flexible, you probably do not want to get input in that tool, rather to get input in the main routine (eliminate line 2, it is redundantly asking the user to repeatedly enter the sentence).

Then you conditionally create another tool, capital(), that you never use. Creating it does not use it. And, if len(newword) is say 10, you define that tool 5 times as the definition is inside a loop. Keep your function definitions outside of loops and outside of if statements.

As written, UpperVowels() does not return anything. Capital() does, but since it is never called the best you can hope for is nothing.

The parameters in a function definition are placeholders. If they have the same name as something elsewhere in the program then it is like two people with the same names. Same names, but different people. newword in the main routine and newword in your function are not the same.

Better to use unique variable names in your function to avoid this confusion. Remember the function is a tool, acting on parameters to give you a desired output.