Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

TypeError: 'function' object cannot be interpreted as an integer

I’m trying to add more to my code so that you are only allowed to enter specific parameters. Ever since I did that I can no longer get the code to run completely without it telling me it cannot be interpreted as an integer. I’m new to Python and would like to work it out.Tried converting range(length) to an int and str but i’m assuming i’m going about it the wrong way. Any tips appreciated.

import random
import string

def char_length():
    while True:
        char_length = input("How many characters would you like your password to be? ")
        if char_length.isdigit() and 0 < int(char_length) < 51:
            char_length = int(char_length)
            return
        else:
            print('Response must be a number between 0 and 50')
char_length()

def random_pass(length):
   while True:
      spec_char = input("Would you like special characters in your password? ")
      if spec_char == "Yes":
          characters =  string.ascii_letters + string.digits + string.punctuation
          password = ''.join(random.choice(characters) for i in range(length))
          print("Your password is: ", password)
          return
      elif spec_char == "No":
          characters = ''.join(random.choice(string.ascii_letters) for i in range(length))
          print("Your password is: ", characters)
          return
      else:
          print("Please only type Yes or No")

random_pass(char_length)

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Your functions should return the values they’ve generated, rather than just doing a bare return (which implicitly returns None). You can then get that value by actually calling the function with (). See the comments in the fixed code:

import random
import string

def char_length():
    while True:
        # don't reuse the function name for your local length variable
        length = input("How many characters would you like your password to be? ")
        if length.isdigit() and 0 < int(length) < 51:
            return int(length)  # need to actually return the converted length
        else:
            print('Response must be a number between 0 and 50')

def random_pass(length):
    while True:
        spec_char = input("Would you like special characters in your password? ")
        if spec_char == "Yes":
            characters =  string.ascii_letters + string.digits + string.punctuation
            password = ''.join(random.choice(characters) for i in range(length))
            print("Your password is: ", password)
            return password  # return the password
        elif spec_char == "No":
            characters = ''.join(random.choice(string.ascii_letters) for i in range(length))
            print("Your password is: ", characters)
            return characters  # again, return the password (but here it's the "characters" var)
        else:
            print("Please only type Yes or No")

random_pass(char_length())  # call char_length and pass the result to random_pass

The error in your original code was because you were passing char_length (the function) as the argument to random_pass, rather than char_length() (the result of calling the function, which will be an int).

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading