파이썬 도움부탁드립니다
본문
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