我想编写一个带字符串的程序,比方说"Fox"
,然后会显示:
fox, Fox, fOx, foX, FOx, FoX, fOX, FOX
到目前为止我的代码:
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
到目前为止的输出:
Enter String: fox
Fox
fOx
foX
>>>
答案 0 :(得分:29)
>>> import itertools
>>> map(''.join, itertools.product(*((c.upper(), c.lower()) for c in 'Fox')))
['FOX', 'FOx', 'FoX', 'Fox', 'fOX', 'fOx', 'foX', 'fox']
或者
>>> s = 'Fox'
>>> map(''.join, itertools.product(*zip(s.upper(), s.lower())))
答案 1 :(得分:6)
我一直想尝试这个。
不知道这是否符合您的资格要求(虽然确实有效)。
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
这个想法是,当你以二进制递增时,你得到1和0的所有可能的排列。
然后你只需将这个1和0的列表转换为字符串,1表示大写,0表示小写。
答案 2 :(得分:1)
使用列表理解的一个班轮:
from itertools import permutations
strs='fox'
combin=[''.join(x)for x in permutations(list(strs)+list(strs.upper()),3) if ''.join(x).lower()=='fox']
print(combin)
['fox', 'foX', 'fOx', 'fOX', 'Fox', 'FoX', 'FOx', 'FOX']
使用for-in循环:
from itertools import permutations
strs='fox'
lis2=list(strs)+list(strs.upper())
for x in permutations(lis2,3):
if ''.join(x).lower()=='fox':
print(''.join(x))
fox
foX
fOx
fOX
Fox
FoX
FOx
FOX
答案 3 :(得分:1)
这是@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)]
答案 4 :(得分:1)
使用乘积(False,True)查找字符串中上下更改字符的任何排列
def capitalize_char_permutation (string:str) -> str :
conditions = product((0,1), repeat=len(string))
for i in conditions:
result = ''
for j in range(len(i)):
if i[j]==0 :
result+= string[j].lower()
else:
result+= string[j].upper()
yield result
答案 5 :(得分:0)
尽管我尝试的是c ++,但我想您会明白的。我陷入了同样的问题,于是我四处搜寻,这就是我最终写的内容……我知道它并不完美,如果有人能帮助我更好地编写代码并指出错误,我将不胜感激。
#include <bits/stdc++.h>
using namespace std;
string decToBinary(int n,int l)
{
string ret="";
for (int i = l-1; i >= 0; i--) {
int k = n >> i;
if (k & 1)
ret=ret+"1";
else
ret=ret+"0";
}
return ret;
}
int main()
{
string x;
cin>>x;
transform(x.begin(), x.end(), x.begin(), ::tolower);
int size=x.length();
string bin;
for(int i=0;i<pow(2,size);i++)
{
bin=decToBinary(i,size);
for(int j=0;j<size;j++)
{
if(bin[j]=='1')
cout<<(char)(x[j]-32);
else
cout<<x[j];
}
cout<<endl;
}
}
假设单词“ dog” ...如此,将有2 ^(字母数),即2 ^ 3 = 8个组合。因此,在此程序中,我们从0-7进行迭代,并将迭代器(在这种情况下为i)转换为二进制,例如,以第五次迭代将二进制为101,然后将得到的字为DoG(以1为大写)和0作为小写)。这样,您可以获得所有2 ^ n个合成词。