Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-数字的旋转_Python_Python 3.x - Fatal编程技术网

Python-数字的旋转

Python-数字的旋转,python,python-3.x,Python,Python 3.x,我试图创建一个代码,它将接受给定的整数,然后输出一组整数,所有这些整数都是输入整数的数字旋转 因此,如果我输入'197',输出应该是'197','971','791' 但是,当我尝试时: def rotation(n): rotations = set() for i in range( len( str(n) ) ): n = int( str(n)[i:] + str(n)[:i] ) rotations.add(n) 对于输入“197”,它只返回“197”、“97

我试图创建一个代码,它将接受给定的整数,然后输出一组整数,所有这些整数都是输入整数的数字旋转

因此,如果我输入'197',输出应该是'197','971','791'

但是,当我尝试时:

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    n = int( str(n)[i:] + str(n)[:i] )
    rotations.add(n)
对于输入“197”,它只返回“197”、“971”,而不是“791”


为什么会发生这种情况?

你就快到了。除了在每次迭代中删除输入n。使用另一个变量名

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    m = int( str(n)[i:] + str(n)[:i] )
    rotations.add(m)
  return rotations

print(rotation(197))
我会这样写,用一套理解:

def rotation(number):
    str_number = str(number)
    return {
        int( str_number[i:] + str_number[:i] )
        for i in range(len(str_number))
    }

由@Henry Woody编写的解决方案2也不错。不要在每次迭代时按
i
旋转输入字符串,而是从上一次迭代开始按
1
旋转。

您就快到了。除了在每次迭代中删除输入n。使用另一个变量名

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    m = int( str(n)[i:] + str(n)[:i] )
    rotations.add(m)
  return rotations

print(rotation(197))
我会这样写,用一套理解:

def rotation(number):
    str_number = str(number)
    return {
        int( str_number[i:] + str_number[:i] )
        for i in range(len(str_number))
    }

由@Henry Woody编写的解决方案2也不错。不要在每次迭代时按
i
旋转输入字符串,而是从上一次迭代开始按
1
旋转。

构建代码的方式会重复旋转,因为在循环的每个步骤上重新分配
n
,并在切片中使用迭代变量
i

因此,您示例中的循环过程是:

  • i=0
    • 您有
      n=197
      ,而旋转逻辑对
      i=0
      没有任何作用,因此您将
      197
      添加到旋转中
  • i=1
    • 同样,您有
      n=197
      ,旋转逻辑使
      n=971
      并将其添加到
      旋转中
  • i=2
    • 现在
      n=971
      ,索引
      2
      中的旋转逻辑切片,但是
      n
      已经旋转,因此我们再次使用
      n=197
      ,它被添加到
      旋转中(由于
      旋转
      是一个集合,因此被删除)。基本上,
      n
      已经向前旋转,现在正向前旋转2步(返回初始值并跳过
      n=719
要解决此问题,您可以:

1.
n
保持在其初始值,并在每个步骤上旋转
n
全部金额(
i
),并将其添加到
旋转中,而不进行修改
n
。像这样:

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    rotations.add(int( str(n)[i:] + str(n)[:i] ))
  return rotations
def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    n = int( str(n)[1:] + str(n)[:1] )
    rotations.add(n)
  return rotations
2.在每一步上向前旋转
n
,但每次只向前旋转一个位置。像这样:

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    rotations.add(int( str(n)[i:] + str(n)[:i] ))
  return rotations
def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    n = int( str(n)[1:] + str(n)[:1] )
    rotations.add(n)
  return rotations

您构建代码的方式会重复循环,因为您在循环的每个步骤上重新分配
n
,并在切片中使用迭代变量
i

因此,您示例中的循环过程是:

  • i=0
    • 您有
      n=197
      ,而旋转逻辑对
      i=0
      没有任何作用,因此您将
      197
      添加到旋转中
  • i=1
    • 同样,您有
      n=197
      ,旋转逻辑使
      n=971
      并将其添加到
      旋转中
  • i=2
    • 现在
      n=971
      ,索引
      2
      中的旋转逻辑切片,但是
      n
      已经旋转,因此我们再次使用
      n=197
      ,它被添加到
      旋转中(由于
      旋转
      是一个集合,因此被删除)。基本上,
      n
      已经向前旋转,现在正向前旋转2步(返回初始值并跳过
      n=719
要解决此问题,您可以:

1.
n
保持在其初始值,并在每个步骤上旋转
n
全部金额(
i
),并将其添加到
旋转中,而不进行修改
n
。像这样:

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    rotations.add(int( str(n)[i:] + str(n)[:i] ))
  return rotations
def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    n = int( str(n)[1:] + str(n)[:1] )
    rotations.add(n)
  return rotations
2.在每一步上向前旋转
n
,但每次只向前旋转一个位置。像这样:

def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    rotations.add(int( str(n)[i:] + str(n)[:i] ))
  return rotations
def rotation(n):
  rotations = set()
  for i in range( len( str(n) ) ):
    n = int( str(n)[1:] + str(n)[:1] )
    rotations.add(n)
  return rotations

只是好奇,为什么你不想要179917和719呢?要么重新分配
n
(并在索引
0
处处理元素),要么处理索引
i
(并将结果分配给一个临时变量。不要两者兼而有之。在一张纸上写下你想要做的事情,你会明白的。@YunkaiXiao他想要旋转,不是排列。@Jérôme那么应该是719而不是791对吗?@YunkaiXiao对。这是操作中的一个错误,我没有注意到。只是好奇,为什么你不想要179、917和719?要么重新分配
n
(在索引
0
处使用元素),要么使用索引
I
(并将结果分配给一个临时变量。不要两者都做。在一张纸上写下你想做的事情,你会明白的。:)@云开霄他想要的是轮换,而不是排列。@Jérôme那么应该是719而不是791对吧?@YunkaiXiao对。这是OP中的一个错误,我没有注意到。哈哈,我正要发布这个答案,唯一的区别是我用了x而不是m:)(或者干脆去掉变量)哈哈,我正要发布这个答案,唯一的区别是我用了x而不是m:)(或者干脆去掉变量)