#!/usr/bin/env python
# coding: utf-8

# 2020136078_심재규
# ================
# ### 스크립트프로그래밍 Homework #1

# 1번 문제
# =======
# #### a="Hello Python" 문자열을 Slicing과 연결 연산자 (+)를 사용하여 "Python Hello"로 변경하시오.
# ##### [주의] a 변수 자체에 "Python Hello" 문자열이 저장되어야 함

# In[26]:


a = "Hello Python"
a = a[6:] + a[5] + a[0:5]
a


# #### 슬라이싱을 이용해 시작 위치부터 보폭으로 끊어 가져온다.
# #### 인덱스 6번부터 가져오고 띄어쓰기 후 0~4번까지 가져온다.

# 2번 문제
# =======
# #### b="Hello Python World" 문자열을 Slicing과 연결 연산자 (+)를 사용하여 "World Python Hello"로 변경하시오.
# ##### [주의] b 변수 자체에 "World Python Hello" 문자열이 저장되어야 함

# In[27]:


b = "Hello Python World"
b = b[13:] + b[12] + b[6:12] + b[5] + b[0:5]
b


# #### 인덱스 13이상을 가져온 후 띄어쓰기
# #### 인덱스 6~11을 가져온 후 띄어쓰기
# #### 인덱스 0~4를 가져온다. 

# 3번 문제
# ========
# #### c="Hello"를 "olleH"로 변경하시오
# #### [주의] c 변수 자체에 "olleH" 문자열이 저장되어야 함

# In[28]:


c = "Hello"
c = c[::-1]
c


# #### 인덱스 방향을 -1로 함으로써 역방향으로 가져온다.

# 4번 문제
# ========
# #### s="python"에 대해 다음 문제를 풀어보시오.
# 1. s[0], s[0][0], s[0][0][0]은 각각 어떤 값이 나오는지 확인하고 그 이유를 나름대로 설명해 보시오.
# 2. s[-100], s[100]은 값이 나오는지 에러가 나오는지 확인하고 그 결과에 대한 이유를 나름대로 설명해 보시오.
# 3. s[-100, 100]은 값이 나오는지 에러가 나오는지 확인하고 그 결과에 대한 이유를 나름대로 설명해 보시오.
# 4. s[1:-1]의 결과를 확인하고 그 결과에 대한 이유를 정확하게 설명하시오.
# 5. s[3:-3]의 결과를 확인하고 그 결과에 대한 이유를 정확하게 설명하시오.

# In[29]:


s = "python"
s[0]


# #### 0번 인덱스 p를 가져온다.

# In[30]:


s[0][0]


# #### 0번 인덱스 p에서 0번 인덱스인 p를 가져온다.

# In[31]:


s[0][0][0]


# #### 0번 인덱스 p에서 0번 인덱스 p의 0번 인덱스 p를 가져온다.

# In[32]:


s[-100]


# #### -100번 인덱스는 우측에서부터 좌측으로 100번째 인덱스를 가리키기 때문에
# #### 범위를 벗어나 존재하지 않기 때문에 에러가 나온다.

# In[33]:


s[100]


# #### 100번 인덱스는 범위내에 존재하지 않기 때문에 에러가 나온다.

# In[34]:


s[-100, 100]


# #### -100번 인덱스와 100번 인덱스는 존재하지 않기 때문에 에러가 나온다.

# In[35]:


s[1:-1]


# #### 1번 인덱싱(y)부터 -1번 인덱싱(n) 앞까지 출력한다.

# In[36]:


s[3:-3]


# #### 3번 인덱스에서 -3번 인덱스 앞까지 출력한다.
# #### 3번 인덱스는 h, -3번 인덱스는 h
# #### 따라서 아무것도 출력하지 않는다.

# 5번 문제
# =======
# #### for문을 활용하여 1부터 100사이의 홀수를 출력하시오.

# In[37]:


for i in range(1,101):
    if(i%2==1):
        print(i)


# #### for in문을 이용하여 2로 나누어 떨어지지 않는 홀수를 출력한다.

# 6번 문제
# =======
# #### while문을 활용하여 1부터 100사이의 짝수의 합을 계산하여 출력하시오.

# In[38]:


j=1
sum=0
while j<=100:
    if(j%2==0):
        sum+=j
    j+=1
print(sum)


# #### while문을 이용하여 2로 나누어 떨어지는 짝수의 총합을 출력한다.

# 7번 문제
# =======
# #### 사용자로 부터 임의의 정수를 입력받고, 해당 숫자를 역순으로 출력하는 프로그램을 작성하시오.
# 
# #### [실행 예]
# 
# #### 정수를 입력하세요: 3125
# #### 숫자 역순은 5213 입니다.

# In[39]:


number = int(input('정수를 입력하세요: '))
tmp = number

reverse = 0
while tmp > 0:
    reverse *= 10
    reverse += tmp % 10
    tmp //= 10
    
print('숫자 역순은 ' + str(reverse) + ' 입니다.')


# #### 입력한 정수를 받아 10으로 나눈 나머지를 다른 변수에 저장한 후
# #### 10씩 곱하여 역순으로 만든다.

# 8번 문제
# =======
# #### 사용자로 부터 정수를 입력받아서 1부터 그 사이에 존재하는 소수 (Prime number)를 출력하는 파이썬 프로그램을 작성하시오.

# In[40]:


number = int(input('정수를 입력하세요: '))

def prime(n):
    if n<2:
        return False
    elif n == 2:
        return True
    else:
        for i in range(2, n):
            if n%i == 0:
                return False
        return True
    
for i in range(1, number+1):
    if prime(i):
        print(i)


# #### 1을 입력받은 경우 출력하지 않는다.
# #### 2를 입력받은 경우 출력한다.
# #### 3이상을 입력받은 경우 2부터 해당 정수까지의 반복문을 사용하여
# #### 나누는 수를 2까지 줄이며 나눈 후
# #### 나누어 떨어지면 False, 나누어 떨어지지 않으면 True를 반환하여
# #### 1부터 그 사이에 존재하는 소수만 출력하도록 만든다.

# 9번 문제
# ======
# #### Kevin과 Stuart는 게임을 한다. 규칙은 아래와 같다.
# 
# * 두 플레이어에게 같은 string, S, 가 주어진다.
# * 두 플레이어는 string S의 문자를 사용하여 substring을 만들어야 한다(중복 가능).
# * Stuart는 자음으로 시작하는 단어를 만들어야 한다.
# * Kevin은 모음으로 시작하는 단어를 만들어야 한다.
# * 게임은 두 플레이어가 만들 수 있는 모든 단어를 만들었을 때 끝난다.
# * 점수 계산 : substring 1개당 +1 점을 획득한다. (아래 그림 참고)

# In[41]:


import re

S = input('string S를 입력하세요: ')
test = S.upper()
Stuart = 0
Kevin = 0

for i in range(len(test)):
    substr = re.findall(r"(?=([^AEIOU][A-Z]{{{0}}}))".format(i),test)
    Stuart += len(substr)

for i in range(len(test)):
    substr = re.findall(r"(?=([AEIOU][A-Z]{{{0}}}))".format(i),test)
    Kevin += len(substr)

if Stuart > Kevin:
    print('승자: Stuart 점수: ', Stuart)
elif Stuart < Kevin:
    print('승자: Kevin 점수: ', Kevin)
else:
    print('무승부')


# #### string S를 입력받은 후
# #### Stuart는 자음으로 시작하는 substring으로 점수를 구하고,
# #### Kevin은 모음으로 시작하는 substring으로 점수를 구한다.
# #### 둘 중 점수가 높은 사람을 승자로 정하고 동일한 경우 무승부로 한다.

# 10번 문제
# ========
# #### 알파벳 소문자만으로 이루어진 string, S, 가 주어지고 아래 2가지 연산을 수행할 수 있다.
# * 추가 : string S의 끝에 알파벳 소문자 하나를 추가한다.
# * 삭제 : string S의 마지막 문자 하나를 삭제한다. empty string에서 삭제 연산을 수행한 결과는 empty string이다.
# * 두 개의 string, s와 t, 그리고 정수 k가 주어질 때, 정확히 k번의 연산을 통해 s를 t로 바꿀 수 있는지 판단하는 함수를 작성하시오.

# In[42]:


def appendDelete(s, t, k):
    '''
    함수 포맷 변경하지 마세요.
    s를 정확히 k번의 연산을 통해 t로 바꿀 수 있다면 'Yes'를 아니면 'No'를 return 해주세요.
    '''
    return 'Yes'    # or 'No'


# 소감
# ------
# #### 수업 내용과 개념은 간단해서 알기 쉽습니다.
# #### 하지만 책과의 목차와 난이도가 약간 다른 것 같아 스스로 찾아보는 과정에서 다른 학우분들은 어떻게 해결하는지 궁금합니다.

# In[ ]:




