帮别人做了一个角谷猜想的Python程序,结果发现多组测试的时候的一些数据出现异常,能否帮助一下。
代码如下
```python
print('Copyright © 2022-2023 5556,All rights reserved.')
print('欢迎使用5556制作的角谷猜想v3.3!')
huida=input('请问使用单独模式还是历遍模式?\n在选择历遍模式之前,需要确认你的CPU是否在3.5GHz之上,内存为16GB以上.\n如果选择完毕,请输出 单独模式 或 历遍模式(如果输入其他字符,将默认为历遍模式)')
if huida=="单独模式":
n = int(input('请输入一个数字(自然数):'))
if n > 0:
m = n
zdm = 0
ys = n
zbs = 0
print('角谷猜想的整个序列是:')
while n!=1:
if n % 2 == 0:
k = n / 2
bs = zbs + 1
zbs = bs
del bs
print('%d'%n,end=" ")
print('/2=%d 所用步数:'%k,end=" ")
print('%d'%zbs,end="\n")
n = k
if n > m:
m = n
zdm = zbs
elif n == 1:
bs = zbs + 1
zbs = bs
del bs
print('%d 所用步数:'%n,end=" ")
print('%d'%zbs,end="\n")
break
else:
bs = zbs + 1
zbs = bs
del bs
g = 3 * n + 1
print('3*%d'%n,end=" ")
print('+1=%d 所用步数:'%g,end=" ")
print('%d'%zbs,end="\n")
n = g
if n > m:
m = n
zdm = zbs
pzl = m / ys
print('膨胀率为:%f'%pzl,end="\n")
print('初值为:%d'%ys,end="\n")
print('最大值为:%d'%m,end=',')
print('最大值出现的步数为:%d'%zdm,end='\n')
else:
m = n
zdm = 0
ys = n
zbs = 0
print('角谷猜想的整个序列是:')
while n!=1:
if n % 2 == 0:
k = n / 2
bs = zbs + 1
zbs = bs
del bs
print('%d'%n,end=" ")
print('/2=%d 所用步数:'%k,end=" ")
print('%d'%zbs,end="\n")
n = k
if n < m:
m = n
zdm = zbs
elif n == -1 or n == -5 or n== -17 :
bs = zbs + 1
zbs = bs
del bs
print('%d 所用步数:'%n,end=" ")
print('%d'%zbs,end="\n")
break
else:
bs = zbs + 1
zbs = bs
del bs
g = 3 * n + 1
print('3*%d'%n,end=" ")
print('+1=%d 所用步数:'%g,end=" ")
print('%d'%zbs,end="\n")
n = g
if n < m:
m = n
zdm = zbs
pzl = m / ys
print('膨胀率为:%f'%pzl,end="\n")
print('初值为:%d'%ys,end="\n")
print('最小值为:%d'%m,end=',')
print('最小值出现的步数为:%d'%zdm,end='\n')
else:
zdbs = 0
zdbssz = 0
zdz = 0
zdzsz = 0
zdpzl = float(0)
zdpzlsz = 0
zdpclsz = 0
n2 = int(input('请输入两个数字(自然数,并输入一个数字后,换行输入另一个,并按升序输入):'))
n1= int(input())
for n in range(n2,n1+1):
if n > 0:
m = n
zdm = 0
ys = n
zbs = 0
while n!=1:
if n % 2 == 0:
k = n / 2
bs = zbs + 1
zbs = bs
del bs
if zbs>zdbs :
zdbs = zbs
zdbssz = n
n = k
if n > m:
m = n
zdm = zbs
if m>zdz:
zdz=m
zdzsz = n
elif n == 1:
bs = zbs + 1
zbs = bs
del bs
if zbs>zdbs :
zdbs = zbs
zdbssz = n
if m>zdz:
zdz=m
zdzsz = n
break
else:
bs = zbs + 1
zbs = bs
del bs
g = 3 * n + 1
if zbs>zdbs :
zdbs = zbs
zdbssz = n
n = g
if n > m:
m = n
zdm = zbs
if m>zdz:
zdz=m
zdzsz = n
pzl = m / ys
if pzl>zdpzl:
zdpzl=float(pzl)
zdpzlsz = n
else:
m = n
zdm = 0
ys = n
zbs = 0
while n!=1:
if n % 2 == 0:
k = n / 2
bs = zbs + 1
zbs = bs
del bs
n = k
if zbs>zdbs :
zdbs = zbs
zdbssz = n
if n < m:
m = n
zdm = zbs
if m<zdz:
zdz=m
zdzsz = n
elif n == -1 or n == -5 or n== -17 :
bs = zbs + 1
zbs = bs
del bs
if zbs>zdbs :
zdbs = zbs
if m<zdz:
zdz=m
zdzsz = n
break
else:
bs = zbs + 1
zbs = bs
del bs
g = 3 * n + 1
n = g
if n < m:
m = n
zdm = zbs
if zbs>zdbs :
zdbs = zbs
zdbssz = n
if m<zdz:
zdz=m
zdzsz = n
pzl = m / ys
if pzl>zdpzl:
zdpzl=pzl
zdpzlsz = n
print('最大步数为:%d'%zdbs)
print('最大步数所在的数为:%d'%zdbssz)
print('所有最大值或最小值为:%d'%zdz)
print('最大值或最小值所在的数为:%d'%zdzsz)
print('最大膨胀率为:%f'%zdpzl)
print('最大膨胀率所在值为:%d'%zdpzlsz)
```