# while
N = 10
sum = 0 # sum을 0으로 초기화
i = 1 # range 대신 counter i를 사용
while i <= N:
sum = sum + i # sum을 누적(accumulation)
i = i + 1 # counter 1 증가
print("The sum is", sum) # 출력 : The sum is 55
number = 1234
sum = 0
while number > 0:
digit = number % 10
sum = sum + digit
number = number // 10
print("자리수의 합은 %d입니다." % sum)
# function
def functionName(n, l):
print(n)
print(l)
return l
num = 10
list = [1, 2, 3, 4]
functionName(num, list)
def get_sum(start, end):
sum = 0
for i in range(start, end + 1):
sum += i
return sum
sum1 = get_sum(1, 10)
sum2 = get_sum(20, 30)
print(sum1, sum2)
# 함수에 return 이 없다고 반환값이 없는게 아니다 기본적으로 None 을 리턴한다.
# function2
# p11 참조 copy(주소값 넘김), shallow copy, deep copy
def func(p1, p2, L):
sum = p1 + p2
p1 += 4
L[0] += 2
return p1, sum
x = 1
y = 2
sq = [4, 1, 1]
x, hap = func(x, y, sq)
print(x, hap, sq) # 5 3 [6,1,1]
while-problem1
# 임의의 정수들 입력받아 합계와 평균 계산해 출력
# 0 입력되면 더이상 입력 안받고 결과 출력, 출력 시 입력받은 정수들도 함께 출력
# while 사용, 입력받은 값은 리스트에 저장, 입력문은 한번 사용
list = []
sum = 0
while True:
num = int(input("정수를 입력 (0을 입력하면 종료) : "))
if num == 0:
print("입력한 정수 리스트 : {}".format(list))
print("합계 : {}".format(sum))
if len(list) == 0:
print("평균 : 0")
else:
print("평균 : {}".format(sum / len(list)))
break
sum += num
list.append(num)
while-problem2
# 구하려는 소수의 갯수를 입력받아, 소수 구하기
def isPrime(num):
primeChk = True
k = 2
while k < num :
if num % k == 0:
primeChk = False
break
k = k + 1
if primeChk:
return True
else:
return False
primeCount = int(input("구하려는 소수의 개수를 입력 :"))
fulfilledCount = 0
increaseCount = 1
while True:
increaseCount += 1
if fulfilledCount == primeCount:
print("{} 개의 소수를 찾았습니다".format(fulfilledCount))
break
if isPrime(increaseCount):
print(increaseCount)
fulfilledCount += 1
while-problem3
# 여러 갯수의 정수 입력 받아, 각 수가 양수인지 음수인지 구하여 각각의 갯수 출력
# 입력으로부터 정수 리스트로 변환하는 것은 한 줄 코드로 작성
# list comprehension 써라
list = [int(x) for x in input("정수들을 입력 : \n").split()]
# 입력 받은 값 중 0은 무시
negativeCount = 0
positiveCount = 0
loopCount = 0
sum = 0
if len(list) == 0:
print("입력한 숫자가 없습니다")
else:
while loopCount < len(list):
if list[loopCount] > 0:
positiveCount += 1
elif list[loopCount] < 0:
negativeCount += 1
else:
loopCount += 1
continue
sum += list[loopCount]
loopCount += 1
print("양수: {} 개, 음수 : {} 개, 합계 : {}".format(positiveCount, negativeCount, sum))
function-problem1
import re
# 사용자로부터 패스워드를 입력 받아 유효한 패스워드인지 검사
# 패스워드 유효성 검사 기능은 함수로 구현 할 것
def validatePassword(password):
# 패스워드는 최소한 8자리 이상, 8자리 미만이면 False 반환
if len(password) < 8:
print("error! 8 글자 이상이어야 함")
return False
# 영문자, 숫자를 제외한 다른 문자가 있으면 False 반환
if not password.isalnum():
print("error! 영문자, 숫자로만 구성되어야 함")
return False
# 영문자로만 구성되었으면 False 반환
if password.isalpha():
print("error! 숫자도 포함되어야 함")
return False
# 숫자로만 구성되었으면 False 반환
if password.isdecimal():
print("error! 영문도 포함되어야 함")
return False
numList = re.findall(r'\d', password)
if len(numList) < 2:
print("error! 최소한 2개의 숫자를 포함해야 함")
return False
return True
# 총 5번의 패스워드 유효성 검사, 유효하면 종료함.
opportunityCount = 5
while opportunityCount > 0:
password = input("Enter password: ")
if validatePassword(password):
print("Valid password")
break
else:
print("Invalid password")
opportunityCount -= 1
function-problem2
def calculateStringCount(string):
dictionary = dict()
# 대소문자 구분을 하지 않음
stringList = list(string.lower())
for i in range(len(stringList)):
# 빈칸 무시
if stringList[i] == ' ':
continue
if stringList[i] in dictionary:
count = dictionary.get(stringList[i])
count += 1
dictionary[stringList[i]] = count
else:
dictionary[stringList[i]] = 1
# 반환 받은 문자의 개수 정보는 메인에서 출력할 것
return dictionary
# 메인에서 입력 받은 문자열을 넘겨
dictionary = calculateStringCount(input("문자열 입력 : "))
for key, value in dictionary.items():
print("{} : {}".format(key, value))
function-problem3
def plus(num1, num2):
return num1 + num2
def minus(num1, num2):
return num1 - num2
def mul(num1, num2):
return num1 * num2
def div(num1, num2):
return num1 / num2
str = input("수식 입력(예: 20 * 40) : ")
n1, exp, n2 = str.split()
n1 = float(n1)
n2 = float(n2)
# 메인에서는 연산자에 따라 함수를 호출한다.
# 계산 결과를 반환 받아 출력한다.
if exp == "+":
result = plus(n1, n2)
print("%.6f + %.6f = %.6f" % (n1, n2, result))
elif exp == "-":
result = minus(n1, n2)
print("%.6f - %.6f = %.6f" % (n1, n2, result))
elif exp == "*":
result = mul(n1, n2)
print("%.6f * %.6f = %.6f" % (n1, n2, result))
elif exp == "/":
if n2 == 0:
print("%.6f 로 나누기를 수행할 수 없습니다." % n2)
else:
result = div(n1, n2)
print("{} / {} = {}".format(n1, n2, result))
else:
print("{} 지원하지 않는 연산자입니다.".format(exp))
function-problem4
import random
# 동전 던지기 횟수를 입력 받아, 정해진 횟수마다 앞면이 나온 확률 출력
# 함수는 던지기 횟수를 인수로 받으며, 앞면이 나온 횟수를 반환
def calculateCoinFrontCount(eachCount):
coinFrontCount = 0
for _ in range(eachCount):
# 동전 던지기는 random 모듈의 randint() 함수를 사용하여 0이면 앞면이고 1이면 뒷면이다
result = random.randint(0, 1)
if result == 0: # 앞면
coinFrontCount += 1
return coinFrontCount
count = int(input("동전 던지기 시도 횟수를 입력(1 - 100) : "))
totalCoinFrontCount = 0
lastProb = 0
for eachCount in range(1, count + 1):
# 1~10 회까지는 매 횟수마다 출력하고, 11~100회는 10단위마다 출력
coinFrontCount = calculateCoinFrontCount(eachCount)
prob = round((coinFrontCount / eachCount) * 100)
if eachCount == count:
lastProb = prob
if eachCount <= 10:
print("{} 번째까지 던지기에서 앞면이 나온 확률 : {}%".format(eachCount, prob))
else:
if eachCount % 10 == 0:
print("{} 번째까지 던지기에서 앞면이 나온 확률 : {}%".format(eachCount, prob))
else:
continue
# 마지막 총 ~번 던지기의 확률 출력은 메인에서 한다
print()
print("***********************************************")
print("총 {}번 동전 던지기에서 앞면이 나올 확률 : {}%".format(count, lastProb))
while-problem1
while-problem2
while-problem3
function-problem1
function-problem2
function-problem3
function-problem4