Python Forum

Full Version: String being broken up into single characters
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
My program is here

When I run the program, I enter in a few colors, usually blue, green, yellow typed like that. When it gets to the end it prints out "Random color for band 1 is e" instead of something like "Random color for band 1 is Green" I created a new program here using just a little bit of the code from the two sections below and it seems to work fine but I can't find what is making it print just one letter instead of the whole word.

Lines 76-99
def askcolornames():
  explaincolors()
  print("First you will pick the colors you want to include in your blanket, max of 5 separated by commas.")

  Color_Names = input("Enter your color names\n\n")
  xxx = Color_Names.split(',')
  for i in range(len(xxx)):
    xxx[i] = xxx[i].rstrip()
    xxx[i] = xxx[i].lstrip()
    xxx[i] = xxx[i].capitalize()
  # delete the null elements (requires for or while loop)
  j = 0
  while len(xxx)>j:
    if []==xxx[j]:
      del xxx[j]
      continue
    j += 1
  if debug[0]:
    print("debug 0:", Color_Names, xxx)
  xxx.sort()
  Color_Names = xxx
  random.shuffle(Color_Names)
  return Color_Names[0]
Lines 122-145
def createpattern():
  ###Put your stuff here
  Camp = []
  currentband = 1
  for i in range(Total_Rows):
    if 0==i:
      #marking first row
      print(random.choice(Color_Names))
      currentcolor = (random.choice(Color_Names))
      if debug:
        print ("Random Color for Band",currentband," is ", currentcolor)
      currentbandstart = 0
      currentbandwidth = MinRows + random.randrange(MaxRowWidth)
      #set currentbandwidth so that the width never goes past
      #the end of the pattern and the following line is unnecessary
      currentbandend = min(MaxRows, currentbandstart + currentbandwidth)
      # first pick lastcolor = a color from all choices
      # mark bandstart = 0
      # mark bandend = min_rows + random integer from 0 to (maxrowwidth - 1)


      #rowtotal = Color_Names[random.randint(0, len(Color_Names) - 1)]
    
  return None
I think the problem is that the contents of the Color_Names variable is inconsistent at different parts of the file. If Color_Names' value is the list ['Red', 'Green', 'Blue', 'Yellow'], then calling random.choice(Color_Names) returns one of these colors, such as 'Blue'. But at the end of askcolornames(), you return Color_Names[0], which would be 'Red' in our case. If Color_Names is the single word 'Red', the call random.choice(Color_Names) will return a random letter from the word 'Red'. This random letter could be 'e'. So you need to be consistent in the use of this variable, make sure that Color_Names is always a list of strings and not a single string.