게시판

검색 결과: 32

, 도장_ 관리자님이 작성
 

https://pythontutor.com/visualize.html#code=i%20%3D%200%0Awhile%20True%3A%0A%20%20%20%20if%20i%20%25%2010%20!%3D%203%3A%0A%20%20%20%20%20%20%20%20i%20%2B%3D%201%0A%20%20%20%20%20%20%20%20continue%0A%0A%20%20%20%20if%20i%20%3E%2073%3A%0A%20%20%20%20%20%20%20%20break%0A%0A%20%20%20%20print%28i,%20end%3D'%20'%29%0A%20%20%20%20i%20%2B%3D%201%0A&cumulative=false&curInstr=15&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false


포럼 상단 고정에 있는 시각화 사이트입니다.

여기서 코드를 단계별로 실행해보세요.

Next 버튼으로 실행하면서 코드가 실행되는 단계를 살펴보면 됩니다.

끝자리가 3이 아닐 때는 continue로 건너 뜁니다. 이때는 i를 1 증가시켜서 처리하고요.

그러나 끝자리가 3이면 첫 번째 if 블록은 실행되지 않습니다. i를 1 증가시키는 코드가 없죠.

끝자리가 3인 숫자를 출력하는 print가 실행되고, i를 증가시켜야 합니다. 그래야 다음 숫자로 진행할 수 있으니까요.


i를 증가시키는 로직은 두 가지입니다.

1. 끝자리가 3이 아닐 때

2. 끝자리가 3일 때


i를 증가시키는 로직을 하나만 두고 문제를 해결하는 코드를 작성해도 됩니다.

continue, break를 설명하기 위해 다소 작위적으로 만든 예제입니다. 좀 더 간단하게는 다음과 같습니다.

for i in range(0, 74):
    if i % 10 == 3:
        print(i, end=' ')

, ­ 이도은 / 학생 / 행정학과님이 작성
 

0과 73 사이의 숫자 중 3으로 끝나는 숫자만 출력되게 만드려는 코드를 작성했습니다. 

그런데 교재에 보면 마지막에 

print(i, end=' ') 

i+=i 

코드가 붙어있는 것을 볼 수 있는데요.


여기서 i+=i 가 왜 추가되어있는지 모르겠습니다.

물론 저 코드를 빼고 실행시켜보니 3 3 3 3 3 3 ... 으로 이루어진 무한 루프가 돌아가고 있음을 확인했습니다. 하지만 원리를 모르겠어서 질문드립니다. 

 

지금 보니 마지막의 print 구문의 들여쓰기가 안되어 있었네요.

감사합니다!

 

다음 검색 용어는 이 메시지의 HTML 마크업에서만 나타납니다. 8.5

IDLE에서 >>> 프롬프트가 아니라 파일을 생성해서 스크립트로 작성하고 실행해야 합니다.

https://glot.io/snippets/g9wthax45n

온라인 실행으로 작성해뒀습니다.

Run 버튼을 클릭하면 됩니다.


결과가 잘 나오는 것을 확인할 수 있습니다.


IDLE 메뉴에서 FILE > New File을 선택해서 스크립트로 작성합니다.

F5 키로 실행하면 결과가 나옵니다.


둘 다 문제가 없습니다.


코드 작성 과정에서 들여쓰기가 달라서 무한 루프가 될 가능성이 있습니다.

들여쓰기를 잘 확인해주세요.



, Unknown Lastname Jean님이 작성
 

그대로 코드를 입력하면 터미널에선 아무것도 뜨지 않으며 무한반복이 됩니다. 디버그모드로 확인해 보니 3번 라인과 6번 라인을 계속 무한으로 돌고 있네요.

지금 몇번째 확인하는데도 코드는 분명히 맞게 입력했는데도 불구하고 마찬가지네요.

, 이 길재님이 작성
 

korean, english, math, science = map(int, input().split(','))

문의한 코드는 삭제합니다.


틀렸다고 나오는데 못찾겠습니다.. 도와주세요

(도장_ 관리자님이 수정함 - 원문 제출일: 금요일, 10 9월 2021, 7:50 오후)

, 도장_ 관리자님이 작성
 
포럼 상단 오른쪽에 8.5로 검색하면 이전 질문과 답변을 볼 수 있습니다.

문의한 코드를 실행하면
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    korean, english, math, science = map(int, input().split(','))
ValueError: invalid literal for int() with base 10: '90 81 86 80'
이는 첫 번째 코드에서 잘못된 부분이 있다는 뜻입니다.

ValueError: invalid literal for int() with base 10: '90 81 86 80'
ValueError이므로 값이 잘못되었다는 뜻입니다.
invalid literal입니다. 정수 리터럴은 10 같은 숫자입니다.
for int with base 10인데 base 10은 10진수입니다.
int 함수에 올바른 10진수가 입력되지 않았다는 뜻입니다.
'90 81 86 80'은 올바르지 않다는 뜻입니다.
입력은
90 81 86 80
입니다.
input() 함수와 split() 함수를 사용해서 90으로 분리해야 합니다.

UNIT 6.4.3과 6.4.4 예제에는 차이점이 있습니다.
해당 단원을 복습해주세요.

, 도장_ 관리자님이 작성
 
UNIT 3.1부터 3.3까지를 학습하면 해당 내용이 설명되어있습니다.

상호작용 모드로 실행하는 IDLE은 실습에 유용하지만,
보통은 스크립트로 모드로 실행합니다. 심사문제는 스크립트 모드로 진행합니다.
따라서 결과를 보고 싶을 때는 print 함수를 사용해야 합니다.

IDLE에는 print 함수가 없어도 결과가 출력되지만,
이는 학습자의 편의를 위한 기능이지 실제 프로그램의 출력이 아닙니다.

>>> a = 10
>>> a
10
>>> print(a)
10
>>> a > 10
False
>>> print(a > 10)
False
>>>

IDLE에서는 차이가 없어보이지만, IDLE에서도 새 파일을 만들어서 스크립트 모드로 실행해보면 print 함수가 없으면 어떤 결과로 출력되지 않는다는 것을 알 수 있습니다.
UNIT 3.1~3.3을 학습하세요. 이미 알고 있다고 생각하고 넘기지 말고, 기초일수록 모르는 개념이 없나 확인하면서 빠르게 복습한다는 마음으로 학습하시면 이후 학습에서도 시간 낭비를 막을 수 있습니다.

보통 빠르게 학습하겠다고 잔꾀를 부리지만, 실제로는 구멍 뚫린 치즈처럼 쌓인 지식이어서 해당 구멍에서 학습 진행이 막히고, 꽤 많은 시간을 낭비하는 학습자를 보게 됩니다. 가능하면 천천히 하나씩 복습한다는 마음으로 학습하는 게 좋습니다.


, 남 조현님이 작성
 

표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 국어는 90점 이상, 영어는 80점 초과, 수학은 85점 초과, 과학은 80점 이상일 때 합격이라고 정했습니다(한 과목이라도 조건에 만족하지 않으면 불합격). 다음 소스 코드를 완성하여 합격이면 True, 불합격이면 False가 출력되게 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).


이 문제에

a, b, c, d = map(int, input().split())
a >= 90 and b > 80 and c > 85 and d >= 80

을 입력했는데 틀렸다고 나와요 어디가 잘못된걸까요...

 

IDLE에서 실행하는 것과 스크립트로 실행하는 것은 다릅니다.

UNIT 3에서 Hello World 예제를 이용해 두 가지 방법의 차이점을 설명했습니다. UNIT 3을 복습하세요.

IDLE에서

>>> a = 30
>>> a
30
처럼 결과가 나오지만, 스크립트에서는 print 함수로 출력하지 않으면 값이 출력되지 않습니다.