파이썬 도움부탁드립니다

파이썬 도움부탁드립니다

QA

파이썬 도움부탁드립니다

본문

def is_unique(string):
    i=0
    j=0
    k=0
    while i < len(string):
        while j < len(string):
            if i == j:
                j+=1
            else :
                if string[i:i+1] == string[j:j+1]:
                    k += 1
                else :
                    j += 1
        i += 1
    return k > 0
    
print(is_unique("hello"))

 

함수에 입력한 문자에 중복되는 글자가 있으면 false 를 출력하고 없으면 true 출력하는 문제입니다

예를 들어 print(is_unique("hello")) 하면 false 이런식으로요 

제가 한 코딩에 어떤 문제가 있는건지 또 이 문제를 어떻게 풀어야 할자 도움부탁드립니다
    

이 질문에 댓글 쓰기 :

답변 1

게시판과 너무 동떨어진 질문이라 답변 하기가 거시기 하지만

성의있는 질문이라 답변드립니다

----------------------------

1. 우선 if string[i:i+1] == string[j:j+1]: k += 1 <-- 같은 문자가 있으면 k가 0보다 커지는데

   return k > 0 <-- 이렇게 해버리면 (없으면 true)와 반대로 같은 문자가 있으면 true가 나오죠

2. 로직이 어떻게 돌아가는지 눈으로 확인 하려면 값을 print 해보면 됩니다

3. 한번 loop후 j 값이 밑에서 len(string)-1과 같아져 버리므로 두번째 while이  i=1부터는 실행 안됩니다

4. string[i:i+1] <-- 문자 한개를 추출하는 것이니 그냥 string[i]

 

print("i = ", i)
while j < len(string):

----------------------------------------

print(string[i] , string[j])
if string[i:i+1] == string[j:j+1]:

 

 

수정

def is_unique(string):
     i=0
     j=0
     k=0
     while i < len(string):
         print("i = ", i)
         j= i+1 <-- 여기가 시작 j 값 넣어여 할 곳 
         while j < len(string):
                 print(string[i] , string[j])
                 if string[i] == string[j]:
                     k += 1
                 j += 1
                    
         i += 1
            
     return not k
    
print(is_unique("hello"))  <-- false
print(is_unique("helo")) <-- true

----------------------------------------

그런데 for문을 사용하면 더 간결 해집니다(쓸데 없이 i+1, j+1 이런 것이 없어도 되니....)

def is_unique2(string):
     k=0
     nn = len(string)
     for  i in range(0, nn):
         for j in range(i+1, nn): <--- 시작 j 값 설정이 제대로 되어야
                 print(string[i] , string[j])
                 if string[i] == string[j]:
                      k += 1           
     return not k

 

print(is_unique("hello")) <-- false
print(is_unique("helo")) <-- true

 

답변을 작성하시기 전에 로그인 해주세요.
전체 208
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT