2011-11-29 2 views
2

두 개의 값을 말하는 목록이 있습니다. 두 요소가 정수가되고 새 값을 새 목록에 추가 할 때까지 각 값에 정수를 곱해야합니다. 목록이 있다고 가정하면 [0.5,1], 일어날 일은 2를 곱해서 1과 2를 얻고 이들을 새로운 목록 [1,2]에 추가하는 것입니다. 필자가 작성한 코드의 경우 새 목록에 4 개 값 (!)이 표시됩니다. 두 개를 구해야하는데 코드에서 오류가있는 위치는 어디입니까? 당신이 while 루프의 내부 alist을 삭제해야처럼List가 예상보다 많은 값을 반환합니다.

u=1 
    newlist = [1, 0.5] 
    alist = [] 
    while True: 

     cont = True 

     for value in newlist: 

      w = value*u 
      rounded = round(w) 
      alist.append(rounded) 



      if not (abs(rounded - w)<=0.1): 
       cont = False 
     if cont: 
      break 
     u+=1 

답변

2

그것은 그렇지 않으면 각 alist의 이전 요소를 제거하지 않고 alist-len(newlist) 항목을 추가 할 for 루프를 통해 실행 보인다. 내가 벽돌 쌓는 코드 다음과 같은 문제가있어

u = 1 
newlist = [1, 0.5] 
while True: 
    alist = [] 
    cont = True 
    for value in newlist: 
     w = value*u 
     rounded = round(w) 
     alist.append(rounded) 
     if not abs(rounded - w) <= 0.1: 
      cont = False 
    if cont: 
     break 
    u += 1 

>>> alist 
[2.0, 1.0] 
0

, 여기, 이것은 당신이 그것을 할 수있는 방법은 다음과 같습니다

vals = [1,0.5] 
i=1 

while 1: 
     if (vals[0] * i) % 1.0 == 0: 
       if (vals[1] * i) % 1.0 == 0: 
         print i 
         vals[0] = vals[0]*i 
         vals[1] = vals[1]*i 
         print vals 
         break 
     i+=1 
1
당신은을 사용하고 있기 때문에 네 개의 값을 얻고있는 이유는

여러 개의 루프 과정에서 동일한 목록을 작성하고 동일한 목록에 요소를 계속 추가합니다. 게다가, 코드에서 오류 몇 가지가있다, 나는 당신에게 작업 버전을 표시하는 경우는 간단 생각하고 당신이 그들을 파악 :

u = 1 
newlist = [1, 0.5] 
alist = [] 

while True: 
    cont = True 
    alist = [] 
    for value in newlist: 
     w = value*u 
     if int(w) != w: 
      cont = False 
      break 
     alist.append(int(w)) 
    if cont: 
     break 
    u += 1 
+0

F.J와 같은 모든 분들께서 간단히 말해서, while 루프에 알리 스트를 넣으면 완벽하게 작동합니다. 그러한 미세한 변화가 프로그램에 얼마나 큰 차이를 가져 왔는지 놀랍습니다. 다시 한 번 감사드립니다. – user1036197

0

사용 기능을 이해하는 일을 더 쉽게 만들 수 있습니다. 한 가지 시도가 있습니다.

def nearly_int(x): 
    return abs(x - round(x)) < 0.1 

def find_multiple(a, b): 
    u = 1 
    while not nearly_int(a * u) or not nearly_int(b * u): 
     u += 1 
    return [round(a * u), round(b * u)] 

newlist = [1, 0.5] 
alist = find_multiple(*newlist) 
관련 문제