jdmorgan wrote:

> Hello,

Welcome!

> I am still fairly new to python, but find it to be a great scripting
> language.Here is my issue:
> 
> I am attempting to utilize a function to receive any sequence of letter
> characters and return to me the next value in alphabetic order e.g. send
> in "abc" get back "abd".I found a function on StackExchange (Rosenfield,
> A 1995) that seems to work well enough (I think):

Please don't try to be clever about formatting your mail. Use text only. 

> /def next(s):/
> 
> /strip_zs = s.rstrip('z')/
> 
> /if strip_zs:/
> 
> /return strip_zs[:-1] + chr(ord(strip_zs[-1]) + 1) + 'a' * (len(s) -
> len(strip_zs))/
> 
> /else:/
> 
> /return 'a' * (len(s) + 1)/

This should be

def next_alpha(s):
    strip_zs = s.rstrip('z')
    if strip_zs:
        return (strip_zs[:-1] + chr(ord(strip_zs[-1]) + 1) +
                'a' * (len(s) - len(strip_zs)))
    else:
        return 'a' * (len(s) + 1)

(I renamed the function because next() already is a built-in function since 
Python 2.6)

The function removes all lowercase "z" letters from the end of the string. 
If the rest is empty like for next_alpha("zzz") it returns len(s) + 1 "a"s, 
or "aaaa" in the example. If the rest is not empty, e.g for

next_alpha("abcz")

it replaces the last non-"z" character with its successor in the alphabet

>>> chr(ord("c")+1)
'd'

and replaces the trailing "z"s with the same number of trailing "a"s.

> I have found this function works well if I call it directly with a
> string enclosed in quotes:
> 
> returnValue = next("abc")
> 
> However, if I call the function with a variable populated from a value I
> obtain from an array[] it fails returning only ^K

I'm assuming that something is missing here, but if the function actually 
returns the string "^K" that is the expected result for

>>> next_alpha("^J")
'^K'

The function only handles lowercase letters a...z correctly.

> Unfortunately, because I don't fully understand this next function I
> can't really interpret the error.Any help would be greatly appreciated.

What is the actual value you pass to the function? Add print statements 

argument = ... # your code
print argument
return_value = next_alpha(argument)
print return_value

and post what is printed.
If you get a traceback, e. g. 

>>> next_alpha([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "next_alpha.py", line 2, in next_alpha
    strip_zs = s.rstrip('z')
AttributeError: 'list' object has no attribute 'rstrip'

cut and paste it, and post it here, too



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to