Python程序改错--八进制转换成十进制

题目:

        下列给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转换成十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。
      请改正程序中的错误,使它能得出正确的结果。

原题目:
# -*- coding:cp936 -*-
'''------------------------------------------------------
【程序改错】
---------------------------------------------------------

题目:下列给定程序中函数fun的功能是:将一个由八进制数字
字符组成的字符串转换成十进制整数。规定输入的字符串最
多只能包含5位八进制数字字符。
      请改正程序中的错误,使它能得出正确的结果。

例如:若输入77777,则输出32767。

---------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------'''
def fun(num):
    length = len(num) 
    sum = 0
    for i in range(length):
        #**********FOUND********** 
        sum += 8 * i * int(num[length-1-i])
    return sum
          
def main():
    num = input("请输入一个8进制数,并按回车继续:")
    #**********FOUND********** 
    if len(num)>=5:
        print("错误: 不得大于5位八进制数字字符!\n")
        exit(0)
    for i in range(len(num)): 
#**********FOUND**********
        if num[i]<'0'and num[i]>'7':
            print("错误: %s 不是一个八进制数字\n" %num[i])
            exit(0)    
    print("转成10进制数为:",fun(num))
   
if __name__ == '__main__':
    main()

改正后:
# -*- coding:cp936 -*-
'''------------------------------------------------------
【程序改错】
---------------------------------------------------------

题目:下列给定程序中函数fun的功能是:将一个由八进制数字
字符组成的字符串转换成十进制整数。规定输入的字符串最
多只能包含5位八进制数字字符。
      请改正程序中的错误,使它能得出正确的结果。

例如:若输入77777,则输出32767。

---------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------'''
def fun(num):
    length = len(num) 
    sum = 0
    for i in range(length):
        #**********FOUND********** 
        sum += (8**i) * int(num[length-1-i])
    return sum
          
def main():
    num = input("请输入一个8进制数,并按回车继续:")
    #**********FOUND********** 
    if len(num)>5:
        print("错误: 不得大于5位八进制数字字符!\n")
        exit(0)
    for i in range(len(num)): 
#**********FOUND**********
        if num[i]<'0'or num[i]>'7':
            print("错误: %s 不是一个八进制数字\n" %num[i])
            exit(0)    
    print("转成10进制数为:",fun(num))
   
if __name__ == '__main__':
    main()

注意:

第二处错误

if len(num)>=5:

如果改为

if len(num)>6:

虽然程序可以正确运行,但是考试系统可能会判定错误

猜你喜欢

转载自blog.csdn.net/m0_63309974/article/details/139349224