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
列表是毫无意义的bcnum[x]
==x
。“back”和“forward”不需要if语句,它们实际上只分别对应于-1
和1
你考虑过这个函数的作用吗?这个
num
列表是毫无意义的bcnum[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。我以前打字打错了