我想编写一个带字符串的程序,比方说"Fox",它会显示:
fox, Fox, fOx, foX, FOx, FoX, fOX, FOX
Run Code Online (Sandbox Code Playgroud)
我的代码到目前为止:
string = raw_input("Enter String: ")
length = len(string)
for i in range(0, length):
for j in range(0, length):
if i == j:
x = string.replace(string[i], string[i].upper())
print x
Run Code Online (Sandbox Code Playgroud)
目前为止的输出:
Enter String: fox
Fox
fOx
foX
>>>
Run Code Online (Sandbox Code Playgroud)
eph*_*ent 29
>>> import itertools
>>> map(''.join, itertools.product(*((c.upper(), c.lower()) for c in 'Fox')))
['FOX', 'FOx', 'FoX', 'Fox', 'fOX', 'fOx', 'foX', 'fox']
Run Code Online (Sandbox Code Playgroud)
要么
>>> s = 'Fox'
>>> map(''.join, itertools.product(*zip(s.upper(), s.lower())))
Run Code Online (Sandbox Code Playgroud)
我一直想试试这个.
不知道这是否符合您的资格(虽然它确实有效).
str = raw_input()
def getBit(num, bit):
return (num & 1 << bit) != 0
for i in xrange(0,2**len(str)):
out = ""
for bit in xrange(0,len(str)):
if getBit(i,bit):
out += str[bit].upper()
else:
out += str[bit].lower()
print out
Run Code Online (Sandbox Code Playgroud)
这个想法是,当你以二进制递增时,你得到1和0的每一个可能的排列.
然后,您只需将此1和0的列表转换为字符串,1表示大写,0表示小写.
这是 @ephemient 接受的优秀答案,稍作修改。
变化:
小写在大写之前,所以列表以“fox”而不是“FOX”开头(问题的示例序列以“fox”开头)
使用列表理解代替map()(无论哪种方式都可以,真的)
分解生成小写/大写对的代码以使其更清晰
将其封装成一个函数。
代码:
import itertools as it
def cap_permutations(s):
lu_sequence = ((c.lower(), c.upper()) for c in s)
return [''.join(x) for x in it.product(*lu_sequence)]
Run Code Online (Sandbox Code Playgroud)