2024-05-23 17:48:05 发布
网友
代码的目的是创建一个最尖点朝下的不等边三角形(数字为1)。程序工作,直到您输入超过17,此时程序停止使用纯1
我已经用数学方法研究了这个程序,看不出有什么错误
n=int(input()) X=0 for j in range(0,n): X = (X*10)+1 print(X) for i in range(1,n): X = (X-1)/10 print(int(X))
你能帮忙找出原因吗
我没有确切的答案,但这与浮点精度有关。当你做X = (X-1)/10的时候,你做的是浮点除法,对于较大的数字,确实会遇到精度问题:更多细节见https://docs.python.org/3/tutorial/floatingpoint.html
X = (X-1)/10
你可以用整数除法来解决这个问题。如果将X = (X-1)/10替换为X = (X-1)//10,则应该得到所需的行为
X = (X-1)//10
Python正在将较大的数字转换为浮点进行除法,这就开始在将较大的数字从二进制转换为十进制时出现小错误。我发现如果你把第二个循环中的赋值改为
X = ((X-1)//10)
要进行截断除法,您将得到预期的输出
只需使用一个由1组成的字符串,然后再转换成int就容易多了
int
n=int(input()) for i in range(n, 0, -1): print(i * '1') # if needed result = int(n * '1')
输出(输入20)
11111111111111111111 1111111111111111111 111111111111111111 11111111111111111 1111111111111111 111111111111111 11111111111111 1111111111111 111111111111 11111111111 1111111111 111111111 11111111 1111111 111111 11111 1111 111 11 1
我没有确切的答案,但这与浮点精度有关。当你做
X = (X-1)/10
的时候,你做的是浮点除法,对于较大的数字,确实会遇到精度问题:更多细节见https://docs.python.org/3/tutorial/floatingpoint.html你可以用整数除法来解决这个问题。如果将
X = (X-1)/10
替换为X = (X-1)//10
,则应该得到所需的行为Python正在将较大的数字转换为浮点进行除法,这就开始在将较大的数字从二进制转换为十进制时出现小错误。我发现如果你把第二个循环中的赋值改为
要进行截断除法,您将得到预期的输出
只需使用一个由1组成的字符串,然后再转换成
int
就容易多了输出(输入20)
相关问题 更多 >
编程相关推荐