我不知道这个y有什么问题

2024-05-23 17:48:05 发布

您现在位置:Python中文网/ 问答频道 /正文

代码的目的是创建一个最尖点朝下的不等边三角形(数字为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))

你能帮忙找出原因吗


Tags: 代码in程序目的forinput错误range
1条回答
网友
1楼 · 发布于 2024-05-23 17:48:05

我没有确切的答案,但这与浮点精度有关。当你做X = (X-1)/10的时候,你做的是浮点除法,对于较大的数字,确实会遇到精度问题:更多细节见https://docs.python.org/3/tutorial/floatingpoint.html

你可以用整数除法来解决这个问题。如果将X = (X-1)/10替换为X = (X-1)//10,则应该得到所需的行为

网友
2楼 · 发布于 2024-05-23 17:48:05

Python正在将较大的数字转换为浮点进行除法,这就开始在将较大的数字从二进制转换为十进制时出现小错误。我发现如果你把第二个循环中的赋值改为

    X = ((X-1)//10)

要进行截断除法,您将得到预期的输出

只需使用一个由1组成的字符串,然后再转换成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

相关问题 更多 >