String module object does not have 'join' attribute

So, I want to create a user text input field in Pygame, and I was told to look at a class module named inputbox. So I downloaded inputbox.py and imported into my main game file. Then I ran a function inside it and got an error:

Traceback (most recent call last): File "C:\Users\Dennis\Tournament\inputbox.py", line 64, in <module> if __name__ == '__main__': main() File "C:\Users\Dennis\Tournament\inputbox.py", line 62, in main print(ask(screen, "Name") + " was entered") File "C:\Users\Dennis\Tournament\inputbox.py", line 46, in ask display_box(screen, question + ": " + string.join(current_string,"")) AttributeError: 'module' object has no attribute 'join' 

I tried running inputbox.py while it was on its own, and got the same error. I am using Python 3.3 and Pygame 3.3, so this can be a problem. I was told that many string functions have been removed recently. If someone knows what the problem is and can fix it, then here is the code: I would be sincerely grateful if anyone could fix this problem, since I have been trying to configure user inputs in Pygame for a long time. Thanks so much for the answers in advance.

 # by Timothy Downs, inputbox written for my map editor # This program needs a little cleaning up # It ignores the shift key # And, for reasons of my own, this program converts "-" to "_" # A program to get user input, allowing backspace etc # shown in a box in the middle of the screen # Called by: # import inputbox # answer = inputbox.ask(screen, "Your name") # # Only near the center of the screen is blitted to import pygame, pygame.font, pygame.event, pygame.draw, string from pygame.locals import * def get_key(): while 1: event = pygame.event.poll() if event.type == KEYDOWN: return event.key else: pass def display_box(screen, message): "Print a message in a box in the middle of the screen" fontobject = pygame.font.Font(None,18) pygame.draw.rect(screen, (0,0,0), ((screen.get_width() / 2) - 100, (screen.get_height() / 2) - 10, 200,20), 0) pygame.draw.rect(screen, (255,255,255), ((screen.get_width() / 2) - 102, (screen.get_height() / 2) - 12, 204,24), 1) if len(message) != 0: screen.blit(fontobject.render(message, 1, (255,255,255)), ((screen.get_width() / 2) - 100, (screen.get_height() / 2) - 10)) pygame.display.flip() def ask(screen, question): "ask(screen, question) -> answer" pygame.font.init() current_string = [] display_box(screen, question + ": " + string.join(current_string,"")) while 1: inkey = get_key() if inkey == K_BACKSPACE: current_string = current_string[0:-1] elif inkey == K_RETURN: break elif inkey == K_MINUS: current_string.append("_") elif inkey <= 127: current_string.append(chr(inkey)) display_box(screen, question + ": " + string.join(current_string,"")) return string.join(current_string,"") def main(): screen = pygame.display.set_mode((320,240)) print(ask(screen, "Name") + " was entered") if __name__ == '__main__': main() 
+4
source share
1 answer

You are trying to use the join method from a string module when you should use it from a str object.

 string.join(current_string,"") 

this line, for example, should be

 "".join(current_string) 

where current_string is iterative.

Just a quick example of how the .join method works

 ", ".join(['a','b','c']) 

will give you a str object of the letters ab and c, separated by a comma and a space.

+7
source

Source: https://habr.com/ru/post/1489528/


All Articles