2017-10-17 2 views
2

어제 나는 선생님이 너무 원하기 때문에 전혀 while (를 사용하지 않고, 내가 무한 for 루프를 할 수있는 방법을 찾고 있던 질문을 게시하고, 또한, 우리는 어떤을 사용할 수 없습니다 명령 클래스에서 보지 못했습니다. 분명히 당신은 here
또한 그 질문을 볼 수 있습니다
"for"루프에서 값을 저장하는 방법은 무엇입니까? 파이썬 3

itertools 또는으로 .Append 같은 while, 또는 다른 기능을 사용하지 않은 아주 실행 가능한 옵션 등 감사에 대한 많은 없었다 그것은 어려웠다 당신들이 나에게 가져온 피드백! :)


그러나 나는 나의 교사와 상담 관리하고 우리는itertools를 사용할 수있는 권한 을 가지고 나만큼 큰 (대신 실제로 무한) 단지 범위.


• 사용자에게 번호를 물어 (를 통해 (약 등급 생각) :


나는 지금은 지침에 따라 한 이미 몇 가지 운동을 해결하지만, 입력
) 및 계속 하시겠습니까? 계속 하시겠습니까? .
• 입력 된 모든 숫자 중에서 평균을 계산하십시오. '

는 (사실은 조금 더 복잡하지만, 나는 그것을 단축하고 난 나머지 다룰 수 있다고 생각) 내가 말했듯이

, 내가 for 루프를 사용해야합니다, 나는 수 twhiles을 전혀 사용하지 않습니다.

def grades(): 
    totalg = 0 
    countg = 0 
    keepAdding = "y" 
    while(keepAdding == "y"): 
     qualif = int(input("Insert grades obtained, in scale from 0 to 100 ")) 
     totalg = totalg + qualif 
     countg = countg + 1 
     keepAdding = str(input("Do you wish to keep adding data? (y/n) ")) 
    print("The average of your grades is", totalg/countg) 

어떻게 그런 일을 할 수 있지만 for 루프가 : 나는 동안 를 사용할 수있는 경우

, 나는 이런 식으로 뭔가를 할 거라고? 나중의 계산을 위해 데이터를 저장하는 방법에 대해서는 잘 모른다.


또한, 나는 루프를 종료 할 수 있도록 더 "적절한"방법을 아는에 관심이 있어요,하지만 난 어느 쪽도 break를 사용할 수 없습니다.

미리 감사드립니다. 모든 조언을 환영하고 환영합니다!:)

+0

어제의 대답에서''반환 ''을 사용하여''아니요 ''제한을 극복했습니다. 아니면'return'도 사용할 수 있습니까? –

+1

어쩌면 당신이 사용할 수있는 것들을 나열해야합니다. 규칙이 무엇인지 모를 때 이런 유형의 질문에 대답하기가 어렵습니다. –

+0

예. (늦은 btw에 대한 미안) 나는 반환을 사용할 수 있고, 내가 한 일은 다소 많지만,이 경우, 예를 들어,이 코드의 경우, 변수 값을 유지하면서 return 명령을 어떻게 끝낼 수 있습니까? ? 내 무지를 유감스럽게 생각합니다. 코드에서 추론 할 수있는 내용이라고 생각하지만, 완전히 이해할 수 없었습니다. 네, 우리가 쉽게 보았던 것들의 목록을 보겠습니다. 하지만 우리는 점점 가까워지고있는 것 같아요. 고마워요. – oScarDiAnno

답변

4

이렇게하는 한 가지 방법은 외부 모듈없이 two-arg iter을 사용하는 것입니다. 인수 두 개를 전달할 때 첫 번째 인수는 반복 인수를 호출하는 인수가없는 함수이고 두 번째 인수는 중지해야한다는 것을 나타내는 것보다 센티널 값입니다. 그 무한 루프, 그래서

for _ in iter(bool, True): 

bool 생성자 False를 반환하기 때문에, True의 감시 값이 발생하지 않을 것입니다 :

그래서 예를 들어, 당신은 같은 간단한와 무한 루프를 만들 수 있습니다. 마찬가지로

, (또는 빈 문자열) 종료의 사용자가 'q'처럼, 주어진 감시 문자열로 응답 할 때까지하라는 메시지 루프를 만들기 위해, 당신은 할 수 :

분명히
for inp in iter(lambda: input("Insert grades obtained, in scale from 0 to 100 (type 'q' to quit)"), 'q'): 
    val = int(inp) 
    ... rest of loop ... 

는, 이것은이다 약간은 애매하다. (두 개의 코드는 iter이 거의 보이지 않는다.) 따라서 대개 을 사용하여 루프를 테스트 한 후 -또는 test-and-return (후자는 교사의 요구 사항을 위반하지 않음)를 사용한다.

try: 
    for ...: 
     if test_for_end: 
      raise StopIteration 
except StopIteration: 
    pass 
# You're outside the loop 

참고 :이 추한하지만 마찬가지로, 예외 처리, 루프를 종료 할 수 있습니다 내가 언급 한 말 그대로 모든 테스트 앤과 실제 while True: 루프 제외하고, 끔찍한 스타일 break/return 케이스. 그러나 당신은 한 손을 등 뒤로 묶었습니다. 그래서 나는 끔찍한 돌연변이 손을 대신 할 것을 제안합니다.

+0

나는 OP가 'iter'를 사용할 수 없다고 생각합니다 ... –

+0

@ PM2Ring : 가능합니다. 하나의 논쟁 iter은 전적으로 들었지만, 그래서 그들은 두 arg 형식으로 소개되지 않은 경우에도 그것을 보았을 수도 있습니다.그들이 내장 함수 위로 갔다면 거기에 있습니다. 마찬가지로, for 루프가 어떻게 작동하는지에 대해서 다루었다면,'iter'는 모든 for 루프의 함축적 부분입니다. 그래서 누가 알겠습니까? – ShadowRanger

+0

나는 그것이 iter.tools에 포함되었다고 믿었을 때 iter know, well, actually을 사용할 수있을 것이라고 믿는다. 나의 선생님은 그것을 허용했다. 우리는 수업에서 그것을 보지 못했습니다. 그렇습니다.하지만 제가 사용할 수있을 것입니다. 그러나 나는'lambda'처럼 사용할 수 없었던 다른 것들을 보았습니다. 나는 여러분에게 너무 많은 투쟁을하고 있다고 생각합니다. 정말로 감사합니다. 그러나 @ PM2Ring이 말했듯이, 우리가 본 물건으로 목록을 작성했다면 더 쉬울 것이라고 생각합니다. 잠시만 요, 나에게도 유용 할 것입니다 – oScarDiAnno

-1

배열에서 얻은 모든 데이터를 저장 하시겠습니까? 나는 당신이 어떤 오버 플로우 문제가 발생하지 않도록, 적어도 그 출발점이 될 것입니다, 연결리스트로 파이썬 작업에 배열을 생각

+1

One : 아니요, 파이썬은'list' 타입에 대한 링크리스트를 사용하지 않습니다 ('array'는 C 타입을위한 모듈이고 아마도 당신이 의미하는 것이 아닙니다) . 2 : 이것은 실제로 대답이 아닙니다. 일종의 질문의 제목에 응답하지만 질문의 본문은 원래의 값을 저장하는 것이 아닙니다. 비록 그것이 그렇다고하더라도, 이것은 대답으로 작용하기에는 너무 모호하거나 넓다. – ShadowRanger

3

에도 '아니 - 휴식'규칙과 "적절한에 대한 요청하지만 "루프를 종료하는 방법은, 내가 그이 가능 말할 것도없이 반환 다소 모순 : 값의

여기
grades = [0] 
for j in grades: 
    t = int(raw_input('grade:')) 
    ans = raw_input('more? [y/n]:').lower() 
    if(ans == 'y'): 
     grades.append(t) 
    else: 
     grades[0] = t 

print(sum(grades)*1.0/len(grades)) 

우리가 반복 계속 성장 목록, 우리는 중지해야 할 때 - 단순히 값을 더하는 것을 멈추고 루프가 끝납니다.

그러나 이 그 문제를 처리하는 적절한 방법이 아니다, 자세한 내용은 ShadowRanger 읽기 -이 나쁜 코딩 스타일과 사용하지 않아야합니다.

관련 문제