C#

2020.07.24(금) - 라즈베리파이 & C# Review & Python

J_Bin 2020. 7. 24. 17:51

*python

1-1-1. 리스트 

aa = [30, 10, 20]
print("현재의 리스트 : %s" % aa)


# %d는 decimal , %s는 string을 의미

aa.append(40)	// append : 요소추가
print("append 후의 리스트 : %s" % aa)
aa.pop()		// pop : 리스트의 제일 마지막요소(방금집어넣은 것) 제거
print("pop 후의 리스트 : %s" % aa)
aa.sort()		// sort : 요소 값들을 오름차순으로 정렬
print("sort 후의 리스트 : %s" % aa)
aa.reverse()	// reverse : 요소 값들을 역순으로 정렬(내림차순)
print("reverse 후의 리스트 : %s" % aa)
aa.insert(2, 222)	// insert : aa 리스트의 세 번째 위치에 222값을 추가
print("insert(2, 222) 후의 리스트 : %s" % aa)
print("20값의 위치 : %d" % aa.index(20))		// index : 20의 위치를 찾기
aa.remove(222)  	// remove : 요소 값 222을 제거
print("remove(222) 후의 리스트 : %s" % aa)
aa.extend([77,88,77]) 	// extend : 다른 리스트(배열) 생성(같이붙여서)
print("extend([77,88,77]) 후의 리스트 : %s" % aa)
print("77값의 개수 : %d" % aa.count(77))	// count : 리스트에 77이 몇개인지?


1-1-2. 2차원 배열

# 2차원 리스트(배열)

aa = [[1,2,3,4],
	  [5,6,7,8],
	  [9,10,11,12]]

print(aa[0][0])		# aa 리스트(배열)의 첫 번째 리스트[1,2,3,4]의 첫번째 요소(1) 출력
print(aa[0])		# aa 리스트 첫 번째 리스트 전체 출력 [1,2,3,4]
print(aa[1][2])		# aa 리스트의 두 번째 리스트[5,6,7,8]의 세 번째(7) 요소 출력

1-1-3. 튜플 : 리스트와 거의 같은 개념이지만 리스트는 요소 값을 변경할 수 있지만 튜플은 한 번 값이 정해지면 바꿀 수 없다. (읽기 전용)

str = "파이썬 문자열"
print(str[0])
print(str[-1])
# card 튜플 선언
card = 'red', 4, 'python', True
print(card)
print(card[1])

 

 

1-1-4. 문자열과 튜플의 관계

card = 'red', 4, 'python', True		# card 튜플을 다양한 타입의 요소로 선언
a, b, c, d = card					# card의 4개의 요소 값들을 a~d 변수에 할당
print(a)
print(b)
print(c)
d = False							# d 변수의 값을 새로 만듬	
									# (수정의 개념이 아니라 새로 만든다)
print(d)							# d값은 튜플이 아니라 bool 타입이므로 수정가능
print(card)

 

 

1-1-5. 딕셔너리 : key값과 value값이 한 쌍으로 저장되는 타입 , value값은 튜플과 다르게 변경이 가능함.

# 딕셔너리 = 작은DB라고 생각하자
# 딕셔너리 선언 > type , values
# :(콜론)을 기준으로 왼쪽에는 type, 오른쪽에는 value값이 들어가야한다.
dict = {'번호':10, '성명':'장동건', '나이':23, '사는곳':'서울'}
# [번호, 성명, 나이, 사는곳] = key / [10, 장동건, 23, 서울] = value

print(dict)
print(type(dict))			# dict 변수의 타입을 출력  > class?
print(dict['나이'])			# 나이 key값으로 나이의 value값을 출력
dict['나이'] = 24			# 나이 key값의 value값 변경
print(dict['나이'])
dict['직업'] = '배우'		# '직업'이라는 key값 추가, '배우'라는 value 추가
print(dict)
print(dict.keys())			# key 값 전체 반환
print(dict.values())		# value 값 전체 반환
print('사는곳' in dict)		# '사는곳'이 key값인지?
del dict['사는곳']			# key 값 '사는곳' 제거
print('사는곳' in dict)		
print(dict)

 

2-1-1. 제어문(if문)

a = 23
if a < 50:
	print('50보다 작군요')
# if else 문
if a < 20:
	print('20보다 작군요')
else:
	print('20보다 크군요')
# elif문
# 사용자가 입력한 값(input)을 int형으로 casting하여 age에 대입
age = int(input('현재 나이를 입력하세요 : '))	
if age < 10:
	print('유년층 입니다.')
elif age < 20:
	print('10대 입니다.')
elif age < 30:
	print('20대 입니다.')
elif age < 40:
	print('30대 입니다.')
else:
	print('장년층 입니다.')





2-1-2. 반복문 (for문) 기초

# for문
# for문 선언 변수 i의 초기값은 0이고 범위는 5, 1씩 증가
for i in range(0, 5, 1):
	# for문의 조건이 맞으면 실행되는 코드
	print(i)
print('----------------')
# for문 처리할 목록에 리스트 변수 선언
for j in[1,3,5,7,9]:
	print(j)
print('----------------')
for k in range(0, 3, 1):
	print("꿈은 이루어 진다.")

 

2-1-3. for문을 이용하여 간단한 계산하기(들여쓰기 조심할 것!)

 #for문을 이용하여 1~10까지 합을 구하시오.
sum = 0
for i in range(1,11,1):
	sum+=i
print("sum : %d" %sum)
print("=================")

# for문을 이용하여 1~10까지의 식과 합을 구하시오
sum = 0
for j in range(1,11,1):
	if j < 10:
		print("%d + " % j, end="")
	elif j == 10:
		print("%d = " % j, end="")
	sum+=j
print("%d" % sum)

 

2-1-4. While문

# while문 조건부 반복문
str = "꿈은 이루어 진다."
i = 0
while i < 3:
	print(str)
	i = i + 1
print("--------------------------")

i = int(input("반복 횟수 숫자를 입력합니다. "))
j = 1
flag = True
while flag:
	j = j + 1
	if i < j:
		flag = False
	print(str)

 

2-1-5. break문 & continue문 & 구구단(4~7단)

# break문
sum, i = 0, 0
for i in range(1, 20, 1):
		sum+=i
		if sum > 100:
			break;
sum-=i
print("%d" % sum)
print("------------------")

sum, i = 0 , 0
j = int(input("숫자를 입력하세요 : "))
while True:
	if i < j:
		i = i + 1
		sum+=i;
	elif i == j:
		break
print("1에서 %d까지의 합은 %d입니다." %(j,sum))




i = 0
while i < 100:    # i가 100보다 작을 때 반복. 0부터 99까지 증가하면서 100번 반복
  i += 1    # i를 1씩 증가시킴
  if i % 2 == 0:  # i를 2로 나누었을 때 나머지가 0이면 짝수
    continue  # 아래 코드를 실행하지 않고 건너뜀
  print(i)
  
  
  
  
  
  
 # 내가 한 것 
  for x in range(4, 10):
    for y in range(1, 10):
        print(x, "X", y, "=", x*y)
print("---------------------")


# 강사님 코드
for i in range (1,10,1):
	for j in range (1,10,1):
		if 4 > i:
			break
		if 7 < i:
			break
		print("%d * %d = %d" % (i,j,(i*j)))

 

*라즈베리파이

GND : 기준이 되는 전압(V) , 상대적 개념, 일반적으로 0V

저항이 0으로 수렴하면 > 합선 or 쇼트

가변저항 : 저항값이 변할수 있는 저항

풀업저항 : 측정하는 위치에서 완전한 0V입력을 감지하기 위해서

제3의 상태 : 3 states / High도 low도 아닌 제3의 상태
-pintout : 현재 연결된 라즈베리파이의 상태를 알려줌

1-1-1. 전류가 흐르지 않을 때 LOW 흐를 때 HIGH

 

*C# Review

1-1-1. ★MessageMap 기법/ 유지보수가 편리하다는 장점이 있음

using System;

delegate int CalcDelegate(int x, int y);
delegate void WorkDelegate(char arg1, int arg2, int arg3);

class MessageMap
{
    public char opCode;
    public CalcDelegate Calc;
    public MessageMap(char opCode, CalcDelegate Calc)
    {
        this.opCode = opCode;
        this.Calc = Calc;
    }
}

public class Mathematics
{
    MessageMap[] aMessageMaps;
    static int Add(int x, int y) { return x + y; }
    static int Sub(int x, int y) { return x - y; }
    static int Mul(int x, int y) { return x * y; }
    static int Div(int x, int y) { return x / y; }
    static int Per(int x, int y) { return x % y; }


    public Mathematics() // 생성자
    {
        
        aMessageMaps = new MessageMap[] { new MessageMap('+',Add), new MessageMap('-',Sub),
                                          new MessageMap('*',Mul), new MessageMap('/',Div), 
                                          new MessageMap('%',Per) };
    }
    public void Calculate(char opCode, int operand1, int oprand2)
    {
        Console.Write(opCode + " : ");

        foreach (MessageMap Temp in aMessageMaps)
        {
            if(Temp.opCode == opCode)
            {
                Console.WriteLine(Temp.Calc(operand1, oprand2));
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Mathematics mathematics = new Mathematics();
            WorkDelegate workDelegate = mathematics.Calculate;
            workDelegate('+', 10, 6);
            workDelegate('-', 10, 6);
            workDelegate('*', 10, 6);
            workDelegate('/', 10, 6);
            workDelegate('%', 10, 6);

        }
    }
}