Python 如何舍入到特定的预定义数字?

Python 如何舍入到特定的预定义数字?,python,python-3.x,Python,Python 3.x,在Python3中,我需要将数字四舍五入到0、25、50、75或100。还有其他一些线程也有类似的问题,但我不能对它们掉以轻心 我试图通过比较差异来舍入数字,但我可能错了。(此代码未完成,当我意识到它的开始不起作用时,我没有继续) Position=int(输入()) RC1=25-位置 RC2=50-位置 RC3=75-位置 如果(RC1(s0,s1),(s1,s2),(s2,s3),…” a、 b=国际热核实验堆(可测试),国际热核实验堆(可测试) 下一个(b,无) 返回拉链(a、b) 值=

在Python3中,我需要将数字四舍五入到0、25、50、75或100。还有其他一些线程也有类似的问题,但我不能对它们掉以轻心

我试图通过比较差异来舍入数字,但我可能错了。(此代码未完成,当我意识到它的开始不起作用时,我没有继续)

Position=int(输入())
RC1=25-位置
RC2=50-位置
RC3=75-位置
如果(RC1

我想让它输出最接近的数字。例如,20圈变成25圈,42圈变成50圈等等。

您可以使用除法和舍入法将数字映射到最近的位置:

num = int(input())

Position= (round(num/25)*25)

print(Position)

您可以使用除法和舍入法将数字映射到最近的位置:

num = int(input())

Position= (round(num/25)*25)

print(Position)

您可以使用类似的方法来确定输入值位于预定义的
values
列表中的哪两个值之间,然后是最接近的值。注意:该方法不对列表中的值进行任何假设,除非它们是按升序排列的(允许它们的间隔不相等):

def成对(iterable):
“s->(s0,s1),(s1,s2),(s2,s3),…”
a、 b=国际热核实验堆(可测试),国际热核实验堆(可测试)
下一个(b,无)
返回拉链(a、b)
值=0,25,50,75,100
posn=int(输入(“输入位置:”)
对于成对的lo、hi(值):

如果lo,您可以使用类似的方法来确定预定义的
列表中输入值介于哪两个值之间,然后是最接近的值。注意:该方法不对列表中的值进行任何假设,除非它们是按升序排列的(允许它们的间隔不相等):

def成对(iterable):
“s->(s0,s1),(s1,s2),(s2,s3),…”
a、 b=国际热核实验堆(可测试),国际热核实验堆(可测试)
下一个(b,无)
返回拉链(a、b)
值=0,25,50,75,100
posn=int(输入(“输入位置:”)
对于成对的lo、hi(值):
如果lo
def圆形功能(位置):
值=25,50,75,100
结果=100
如果位置<0:
返回-1
对于我而言,价值观:
如果位置
def round_func(位置):
值=25,50,75,100
结果=100
如果位置<0:
返回-1
对于我而言,价值观:
如果位置
你的“步数”是否总是等距分布?在这种情况下,“圆”的确切含义是什么?我的意思是它会跳到最接近它的数字。不是真的。这里有一些例子:4>>>0 12>>0 16>>25 22>>>25等等,基数是任意的,从25的每一个倍数一直到100。不过,这个问题已经解决了,谢谢。你的“步数”总是均匀分布吗?在这种情况下,“轮”到底是什么意思?我的意思是它会跳到最接近它的数字。不是真的。这里有一些例子:4>>>0 12>>0 16>>25 22>>>25等等,基数是任意的,从25的每一个倍数一直到100。这个问题已经解决了,谢谢。答案不错,但我觉得通过巧妙地使用对分模块可以更有效地解决这个问题。。。不知道具体是怎么回事。@Tom:谢谢。是的,它可能也可以通过
对分来完成,如果有大量可能的值,那么对分可能会更快(并且值得使用)。我建议你尝试一下,然后发布你自己的答案@martineau:
如果位置在范围内(值[0],值[-1]);印刷(职位);否则打印(“超出范围”)
可能会有用+1@lL:说得好。是的,我可能应该处理位置值超出范围的情况,但我认为有一种更好的方法,即不需要预先检查每个值…请参阅更新。回答很好,但我觉得通过巧妙地使用
对分
模块可以更有效地完成此操作。。。不知道具体是怎么回事。@Tom:谢谢。是的,它可能也可以通过
对分来完成,如果有大量可能的值,那么对分可能会更快(并且值得使用)。我建议你尝试一下,然后发布你自己的答案@martineau:
如果位置在范围内(值[0],值[-1]);印刷(职位);否则打印(“超出范围”)
可能会有用+1@lL:说得好。是的,我可能应该处理位置值超出范围的情况,但我认为有一种更好的方法,即不需要预先检查每个值…请参阅更新。
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = iter(iterable), iter(iterable)
    next(b, None)
    return zip(a, b)


VALUES = 0, 25, 50, 75, 100

posn = int(input("Enter position: "))

for lo, hi in pairwise(VALUES):
    if lo <= posn <= hi:
        if posn-lo < hi-posn:
            posn = lo
        else:
            posn = hi
        break
else:
    raise ValueError('A position of {} is out of range'.format(posn))

print('rounded position:', posn)