我的代码中的值错误(python 3.0)'chr()arg不在范围内'

时间:2018-11-22 15:05:46

标签: python string

我必须输入一个字符串和一个整数值,并检查该字符串是小写还是大写,并基于此我必须将其递增数字k。例如,如果k=4且字符串为'ABab',则应给出输出'EFef'

这是我的仅用于检查小写字母的代码。不幸的是给了ValueError

s=input()
k=int(input())
l=[]
for i in s:
    if i.islower():
        if 97>=(ord(i)+k)<=122:
            l.append(chr(ord(i)+k))
    else:
        k=k-122
        if 97>=(ord(i)+k)<=122:
            l.append((chr(ord(i)+k)))
            break
        else:
            continue
print(l)

1 个答案:

答案 0 :(得分:1)

回溯显示错误发生的位置。

Traceback (most recent call last):
  File "C:/Users/rob/test.py", line 11, in <module>
    l.append((chr(ord(i)+k)))
ValueError: chr() arg not in range(0x110000)

您正在向chr传递参数,该参数不在允许的范围内。如here所述:

  

该参数的有效范围是从0到1,114,111(0x10FFFF   以16为底)。如果我超出该范围,将引发ValueError。

这是因为您已将k的值更改为(可能)是一个较大的负数:

k=k-122

因此,ord(i)+k的结果通常也是负数。负数不在允许的范围内,因此对chr的调用失败。

您的代码还有很多其他问题,如果我为这个问题写“我的解决方案”,我认为您不会学到很多。首先,您可能要看的另一件事是:

if 97>=(ord(i)+k)<=122:

没有做您想做的,您可能想要做:

if 97<=(ord(i)+k)<=122: