Chr()arg不在范围python中

时间:2016-01-27 18:32:04

标签: python

我一直在创建一个程序,其中一部分涉及随机修改一个字符列表:

    while rel>0:
        pos = random.randint(0,len(out)-1)
        change = random.randint(-1*rel,rel)
        if (change+ord(out[pos]))>=255:
            change = 255-ord(out[pos])
        elif ((ord(out[pos]))-change)<=0:
            change = -1*(ord(out[pos]))
        out[pos] = chr(ord(out[pos])+change)
        rel -= abs(change)

这里,rel是程序用来修改字符列表的'货币'。它首先在列表中选择一个随机位置,并在-rel和+ rel之间随机改变该位置,然后使用chr(ord(out [pos])+ change)更改该字符的值。这给了我一个错误,即这个字符的新修改值超出了范围(256),所以我在更改字符之前添加了要执行的2个if语句,但它偶尔会返回此错误,特别是对于大值相关的我怎么能阻止这个?

1 个答案:

答案 0 :(得分:1)

问题出在您选择的翻译检查上。

elif ((ord(out[pos]))-change)<=0:

为什么这种差异有意义?所有其他操作都在char的 sum 上并进行更改。当更改&lt; 时,您会收到错误消息-ord(out [pos]) if elif 条件都不是True,所以最终取消 chr 负数。

将该减号更改为加号,并且您应该没问题,直到您获得超过512的rel值。如果可以,请考虑使用模数(%)而不是简单的减法。

我花了几分钟来追踪这一点。我清理了程序并添加了一对跟踪打印以查找正在进行的操作。

import random
out = list("Now is the time for all good parties")
rel = 500

while rel > 0:
    pos = random.randint(0, len(out)-1)
    chord = ord(out[pos])
    change = random.randint(-rel, rel)
    print "A", chord, change
    if change + chord >= 255:
        change = 255 - chord
    elif chord + change <= 0:
        change = -chord
    print "B", chord, change
    out[pos] = chr(chord + change)
    rel -= abs(change)

print ''.join(out)