Python 操纵数字算法

Python 操纵数字算法,python,Python,如何修复此算法 def change_num(n, direc, numMove): if direc == 'back': nums = range(10) return nums[n-numMove] elif direc == 'forward': nums = range(10) nums.reverse() return nums[n-numMove]-1 这对direc==“back”

如何修复此算法

def change_num(n, direc, numMove):
    if direc == 'back':
        nums = range(10)
        return nums[n-numMove]
    elif direc == 'forward':
        nums = range(10)
        nums.reverse()
        return nums[n-numMove]-1 
这对direc==“back”不起作用 以下是一些预期回报示例:

0 1 2 3 4 5 6 7 8 9

change_num(1,'back', 5)  -> 6
change_num(5,'back', 1)  -> 4
change_num(7,'forward',5) -> 2
change_num(0,'forward',5) -> 5
你知道algo是怎么工作的吗?我只是没有正确地实施它

def change_num(n, direc, numMove):
   d = {'back' : -1, 'forward' : 1}
   return (n + d[direc]*numMove) % 10
你考虑过这个函数的作用吗?这个
num
列表是毫无意义的bc
num[x]
==
x
。“back”和“forward”不需要if语句,它们实际上只分别对应于
-1
1


你考虑过这个函数的作用吗?这个
num
列表是毫无意义的bc
num[x]
==
x
。“后退”和“前进”不需要if语句,它们实际上只分别对应于
-1
1

而不是
'back'
'forward'
,向前传递
+1
和向后传递
-1
会更容易。然后您的函数简化为

def change_num(n, direc, num_move):
    return (n + direc * num_move) % 10

相比于
'back'
'forward'
,向前传递
+1
和向后传递
-1
更容易。然后您的函数简化为

def change_num(n, direc, num_move):
    return (n + direc * num_move) % 10

您的函数过于复杂,无法在Python3中工作

% cat ./test.py
#!/usr/bin/env python

import unittest

def change_num(n, direc, numMove):
    directions = {
            'back': -1,
            'forward': +1,
            }
    steps = n + directions[direc] * numMove
    wrapped = steps % 10
    return wrapped

class TestChangeNum(unittest.TestCase):

    def test_back_no_wrap(self):
        self.assertEquals(6, change_num(1, 'back', 5))

    def test_back_with_wrap(self):
        self.assertEquals(4, change_num(5, 'back', 1))

    def test_forward_with_wrap(self):
        self.assertEquals(2, change_num(7, 'forward', 5))

    def test_forward_no_wrap(self):
        self.assertEquals(5, change_num(0, 'forward', 5))

if __name__ == '__main__':
    unittest.main()

% python test.py 
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK

您的函数过于复杂,无法在Python3中工作

% cat ./test.py
#!/usr/bin/env python

import unittest

def change_num(n, direc, numMove):
    directions = {
            'back': -1,
            'forward': +1,
            }
    steps = n + directions[direc] * numMove
    wrapped = steps % 10
    return wrapped

class TestChangeNum(unittest.TestCase):

    def test_back_no_wrap(self):
        self.assertEquals(6, change_num(1, 'back', 5))

    def test_back_with_wrap(self):
        self.assertEquals(4, change_num(5, 'back', 1))

    def test_forward_with_wrap(self):
        self.assertEquals(2, change_num(7, 'forward', 5))

    def test_forward_no_wrap(self):
        self.assertEquals(5, change_num(0, 'forward', 5))

if __name__ == '__main__':
    unittest.main()

% python test.py 
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK

为什么
change\u num(7,'forward',5)->4
?是的,它是错别字,应该是'2',修复了它为什么
change\u num(7,'forward',5)->4
?是错别字,应该是'2',修复了我认为nums定义为nums=范围(10)没有nums。在我将nums定义为nums=范围(10)之前,我输入错误。没有nums。我以前打字打错了