2017-11-26 1 views
0

그래서이 프로그램을 만들려고 노력 중이며 지금은 아주 가깝지만 마무리 할 수는 없습니다. 문제는 모듈러스의 사용법에 있기 때문에 문제를 추적했습니다. 나는 5 배의 전자를 얻으려고 노력하고 있지만, 그렇게 할 때, 내 목록에서 세 번째 요소에 -2를 얻는다. 이것은 내가 기대하는 것이 아니다.Python에서 x fold가 있는지 확인하는 방법은 무엇입니까?

아마도 모듈러스로 음수를 나누려고하기 때문에 발생하지만, 어떻게해야할지 모르겠으므로 문제를 해결할 수 없습니다. 누군가 날 도와 줄 수 있니, 제발?

[1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 

을하지만

[1, -3, -2, -1, 0, 1.0, 2, 3, 4, 5, 2.0] 

도움을 주시면 감사하겠습니다 얻을 :

def f10(start, n): 
    """ 
    The parameters start and n are both int's. Furthermore n > 0. 
    The function f10() should return a list of int's that contains n 
    elements. 
    The first element (e) in the resulting list has to be start. 
    The successor of an element e is calculated as follows: 
    - if e is a fivefold (e.g. n is divisible by 5), 
     then the next value of e is e/5 
    - if e is not a fivefold, then the next value of e is e - 4 

    Example: 
     f10(1, 10) should return 
     [1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 
     f10(9, 12) should return 
     [9, 5, 1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 
    """ 

    pass 

    new_list = [] 
    k = range(start, n+1) 
    e = k[0] 

    new_list.append(e) 

    for e in k: 
     if e % 5 == 0: 
      e = float(e)/5 
     else: 
      e -= 4 

     new_list.append(e) 

    return new_list 

print f10(1, 10) 
print f10(9, 12) 

그래서 나는 얻어야한다.

+0

'E = 플로트 (예)를 사용할 수 있습니다/5' 나는 그렇게하지 않을 것입니다. 왜 'e // = 5'가 아닌가? 수레가 옳지 않길 바래 (참고 : 결과는 바뀌지 않지만 여전히 변함) –

+1

'for e in k'? 그건 네가 'e'를 정하는 방식이 아니야. – user2357112

+1

루프에서'k'의 값을'e'로 지정하지만 이전의'e'를 계산에 사용해야합니다. – furas

답변

1

당신은 새로운 일을 계산하기 이전 값을 사용해야합니다.

def f10(start, n): 

    result = [start] # I put first element 

    for _ in range(n-1): # I have to put other n-1 elements yet 
     if start % 5 == 0: 
      start //= 5 
     else: 
      start -= 4 

     result.append(start) 

    return result 

# --- compare result with expected list --- 

print(f10(1, 10) == [1, -3, -7, -11, -15, -3, -7, -11, -15, -3]) 
# True 

print(f10(9, 12) == [9, 5, 1, -3, -7, -11, -15, -3, -7, -11, -15, -3]) 
# True 


편집 : 당신이 range()을 원하지 않는 경우 다음 while len(result) < n:

def f10(start, n): 

    result = [start] 

    while len(result) < n: 
     if start % 5 == 0: 
      start //= 5 
     else: 
      start -= 4 

     result.append(start) 

    return result 
+0

신경 쓰지 마라. 알았다! 고마워, 나는 간단한 스타일을 좋아해. – Siyah

+0

왜냐하면 result에는'n' 요소가 필요하고'result = [start]'에'for' 루프 앞에 먼저 넣습니다. – furas

+0

범위를 사용하지 않을 가능성이 있습니까? 내 말은, for에서 range를 사용하지 않고 하나를 제공 할 수 있습니까? – Siyah

1

여기에 몇 가지 문제가 있습니다. 가장 중요한 것은 변수 e를 사용하여 루프를 반복하고 계산 결과를 저장하는 것입니다.

이 시도 :

def f10(start, n): 
    x = start 
    new_list = [] 
    for i in range(n): 
     new_list.append(x) 
     x = x-4 if x%5 else x//5 
    return new_list 
관련 문제