Python 80分求助,测试点2和10显示RE

P1055 [NOIP2008 普及组] ISBN 号码

LightBeyond @ 2023-03-01 23:32:49

isbn=str(input())
lst=[]
i=1
mode_number=0
for item in isbn:
    if item!='-' and i<=9:
        lst.append(item)
        lst[i-1]=int(lst[i-1])
        mode_number+=lst[i-1]*i
        i+=1
new_number=mode_number%11
if new_number==10:
    new_number='X'
    if new_number==isbn[-1]:
        print('Right')
    else:
        new_isbn=isbn[0:-1]+new_number
        print(new_isbn)
else:
    if new_number==int(isbn[-1]):
        print('Right')
    else:
        new_isbn=isbn[0:-1]+str(new_number)
        print(new_isbn)

求助各位,是哪一部分的原因?


by KSS_IS_BIG_SB @ 2023-03-14 09:35:00

倒数第五行的if判断有问题,如果isbn[-1]恰好等于'X'的话,用int()转换类型是会报错的,可以改成这样,就能过了

if str(new_number)==isbn[-1]:
    print('Right')

因为在这里new_number不会等于10,所以 isbn[-1]等于'X'的情况肯定是错误的,就不用再考虑把'X'转成10比较了

p.s. input()的默认返回值类型就是string,可以不用套str()


|