a=input()
c=0
b=len(a)
if int(a)<0:
b=b-1
for i in range(1,b):
if int(a[i])==2:
c+=1
if int(a)%2!=0:
e=c/b*1.5
else:
e=c/b*3
else:
for i in range(1,b):
if int(a[i])==2:
c+=1
if int(a)%2!=0:
e=c/b
else:
e=c/b*2
e*=100
print("%.2f%%"%e)
根据上述题目信息,我认为该脚本存在三处错误:
1)第二个最外层分支中,数字数位的遍历查找应从第一位开始,也就是将第14行的range起始值改为0.
2)第一个最外层分支中,由于range的左闭右开取值特性,所以边界值应是b+1,即将第6行的b修改为b+1.
3)题目中指出“如果还是个偶数”,则“犯二”指数增加一倍,说明这个条件判断可能基于“给定整数是负数”的前提。因此,最外层else分支不应讨论给定整数的奇偶性,即将第17至20行改为e=c/b.
给出修改后的脚本:
a=input()
c=0
b=len(a)
if int(a)<0:
b=b-1
for i in range(1,b+1):
if int(a[i])==2:
c+=1
if int(a)%2!=0:
e=c/b*1.5
else:
e=c/b*3
else:
for i in range(0,b):
if int(a[i])==2:
c+=1
e=c/b
e*=100
print("%.2f%%"%e)
或者看这个简单一点的脚本:
def how_silly(num:int):
#check out basic information of the giving number
num_content = list(str(num))
sign = '-' if num_content[0] == '-' else '+'
even = True if num % 2 == 0 else False
pos_num = len(num_content) if sign == '+' else len(num_content) - 1
freq = num_content.count('2')
#use calculating rules to find out how silly the number is
silly = freq / pos_num
if sign == '-':
silly *= 1.5
if even == True:
silly *= 2
silly = '{:.2%}'.format(silly)
return silly
num = int(input('>>['))
silly = how_silly(num)
print(silly)
不知道你这个问题是否已经解决, 如果还没有解决的话: