Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中为字符分配整数值而不添加ASCIS_Python_String_Integer_Char_Ascii - Fatal编程技术网

如何在Python中为字符分配整数值而不添加ASCIS

如何在Python中为字符分配整数值而不添加ASCIS,python,string,integer,char,ascii,Python,String,Integer,Char,Ascii,我不知道如何有效地问这个问题,但我需要做的是给字符分配整数值,使字符的加法不等于第一个加第二个,而是等于序列中的下一个数字 例如: 如果我使用ascii值将a-z设置为1-26,那么如果我有字符串ab,那么总和将是3 但是,我希望ab被分配27,ac=28,ad=29等等 所以a=1但是az=51(如果我只是a+z,那就不是27了) 我不确定这是否会影响解决方案,但条件之一是字符串中的字母必须按字母顺序排列,因此字符串可以是“abc”但不能是“cat” 谢谢 可以按照请求的方式计算索引,而无需构

我不知道如何有效地问这个问题,但我需要做的是给字符分配整数值,使字符的加法不等于第一个加第二个,而是等于序列中的下一个数字

例如:

如果我使用ascii值将a-z设置为1-26,那么如果我有字符串
ab
,那么总和将是3 但是,我希望
ab
被分配
27
ac=28
ad=29
等等

所以
a=1
但是
az=51
(如果我只是
a+z
,那就不是27了)

我不确定这是否会影响解决方案,但条件之一是字符串中的字母必须按字母顺序排列,因此字符串可以是“
abc
”但不能是“
cat


谢谢

可以按照请求的方式计算索引,而无需构建所有可能字符串的列表,但这需要一些技巧。下面是一个有效方法的实现:

导入itertools
导入字符串
字母=字符串。ascii_小写
定义参考(最大长度=4):
“”“所需索引操作的引用实现。”“”
a=[]
对于范围内的k(最大长度+1):
用于itertools中的梳。组合(字母,k):
a、 附加(“.join(comb))
返回a.index
def选择(n,k):
“二项式系数”n选择k“。”
如果k<0:
返回0
结果=1
对于范围(k)内的i:
结果*=n-i
结果/=i+1
返回结果
def索引:
“”“索引操作的有效实现。”“”
n=长(s)
选项=len(字母)
结果=0
对于枚举中的i、c:
新选项=长(字母)-字母索引(c)
结果+=选择(选项,n-i)-选择(新选项,n-i)
选项=新选项-1
对于范围(n)中的i:
结果+=选择(长度(字母),i)
返回结果
测试字符串=[
“a”、“j”、“ab”、“az”、“jw”、“yz”、“abc”、“厌恶”、“几乎”,
“开始”,“bijoux”,“活检”,“黑猩猩”,“斜纹棉布”,“印花棉布”]
ref_index=_reference(最大值(映射(len,测试字符串)))
对于测试_字符串中的s:
打印“{0:8}{1:8}{2:8}”
该脚本将高效函数的输出与蛮力实现进行比较,结果是

a              1       1
j             10      10
ab            27      27
az            51      51
jw           228     228
yz           351     351
abc          352     352
abhors     91047   91047
almost    133902  133902
begins    154337  154337
bijoux    171130  171130
biopsy    172655  172655
chimps    201678  201678
chinos    201734  201734
chintz    201781  201781

作业你是否禁止将“aa”作为字母顺序标准的一部分?我不完全理解这些要求。
“z”
“aa”
的结果应该是什么?似乎双方都应该给出26分。这是正确的吗?这是一个类项目的一部分,aa将被排除在外。由于字符串必须采用递增格式,因此第二个字母必须位于第一个字母之后,依此类推。所以z将给出26,aa将返回0I,我正要点击submit(在类似于答案的无代码教程中)。作为我的代码工作的证明,indexify(“”.join(sorted(“porse”))==252666。。我使用了Greg K的unchoose函数。@DSM:像教程一样的答案可能会很受欢迎,因为我的答案没有解释它是如何工作的。我对“取消选择”一无所知——我只是根据一些基本的组合考虑编造了上面的代码。@will:如果这回答了你的问题,你可以点击左边的复选标记来接受答案。