[英]How would I make a try and expect block python to catch an infinite loop in a for loop
我正在解决一个问题,我必须将 output 大于 N 的最小数字包含与 N 相同的数字。如果没有这样的数字,我必须打印“0”作为 output。 这是我现在的代码......
n = int(input())
copy = n+1
while True:
if sorted(str(n)) == sorted(str(copy)):
print(copy)
break
else:
copy+=1
如果一个数字没有这样的数字,我无法找到一种方法来捕捉,因此,“0”。 我在想一个 try expect 块,但它以某种方式捕获了无限循环。 关于如何实现这一点或任何其他建议的任何想法? 谢谢!
样本输入/输出
输入1: 156
output 1: 165
输入 2: 330
output 2: 0
(没有这个数满足条件)
输入 3: 27711
output 3: 71127
我对这个问题有不同的方法:
从最右边的数字开始遍历给定的数字,继续遍历直到找到一个小于之前遍历的数字的数字。 例如,如果输入数字是“534976”,我们停在 4,因为 4 小于下一个数字 9。如果我们没有找到这样的数字,那么 output 是“不可能”。
现在在上面找到的数字“d”的右侧搜索大于“d”的最小数字。 对于“534976”,4 的右侧包含“976”。 大于 4 的最小数字是 6。
交换上面找到的两个数字,我们在上面的例子中得到 536974。
现在将所有数字从“d”旁边的 position 到数字末尾进行排序。 我们排序后得到的数字是output。 最后,对于上面的例子,我们得到“536479”,这是输入 534976 的下一个更大的数字。
在最后一步中,我们应该检查天气结果是否为 32 位数字。
def nextGreaterElement(n):
n = list(str(n))
N = len(n)
for x in range(N - 1, 0, -1):
if n[x] > n[x - 1]:
i = x - 1
break
else:
return -1
swap = i + 1
pos = i
for x in range(swap, N):
if n[pos] < n[x] < n[swap]:
swap = x
n[pos], n[swap] = n[swap], n[pos]
ans = int(''.join(n[:pos + 1]) + ''.join(sorted(n[pos + 1:])))
return ans if len(bin(ans)[2:]) < 32 else -1
print(nextGreaterElement(123))
# 132
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.