Pythonベース#4


24.文字列&リストの問題
06.身分証明書番号を隠す
身分証明書番号YMMDD-Abcdefgは全部で13桁です
身分証明書番号の最後の4桁のdefgだけを隠すセキュリティプログラムを作成したいです.
mask security numberという関数を定義します.この関数は、パラメータがsecurity numberの文字列を受信し、security numberの最後の4文字を「」で置換する新しい文字列を返します.
パラメータsecurity numberには、ワークベンチシンボル(-)が含まれていてもよいことに注意してください.棒が含まれているかどうかにかかわらず、最後の4文字は「」に置き換えなければなりません.
#접근법 #1
def mask_security_number(security_number):
    # security_number를 리스트로 변환
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list) - 4, len(num_list)):
        num_list[i] = "*"

    # 리스트를 문자열로 복구
    total_str = ""
    for i in range(len(num_list)):
        total_str += num_list[i]

    return total_str

-------------------------------------------
# 접근법 #2
# join() method 사용 -> 문자열로 이루어진 리스트를 구분자로 결합, 하나의 문자열로 만듬
def mask_security_number(security_number):
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list) - 4, len(num_list)):
        num_list[i] = '*'

    # 리스트를 문자열로 복구하여 반환
    return ''.join(num_list)
--------------------------------------------
# 접근법 #3
# 문자열 슬라이싱
def mask_security_number(security_number):
    return security_number[:-4] + '****'
07.ファリン・ドロン
ファリン症候群を患っているかどうかを確認するために、関数is_palindromeを書きます.is_palindromeはパラメータword、パリンドロンであればTrue、パリンドロンでなければFalseを返します.
例えば、"racecar"および"토마토"は、逆読み可能であるため、Trueを出力しなければならない.そして"hello"を逆さまに読むと"olleh"になるのでFalseに出ます
def is_palindrome(word):
    for left in range(len(word) // 2):
        # 한 쌍이라도 일치하지 않으면 바로 False를 리턴하고 함수를 끝냄
        right = len(word) - left - 1
        if word[left] != word[right]:
            return False

    # for문에서 나왔다면 모든 쌍이 일치
    return True
-----------------------------------------------
// 문자열 & 리스트 뒤집기
def is_palindrome(word):
    return word == word[::-1]
25. Module
1)関数ファイルの読み込みimport moduleFileName or import moduleFileName as nicknameex) import numpy as np import pandas as pd muduleFileName.function()2)関数ファイルの特定の関数を読み込むfrom moduleFileName import function1, function2 or from moduleFileName import * (출처가 불분명하여 사용 자제)3) Standard libraryimport math import osランダムモジュールimport random
1.randint関数randint:2つの数の間の任意の整数の関数を返します.randint(a, b)μa≦N≦bを満たす任意の整数Nを返す.
2.一致関数uniform:2つの数の間のランダム小数の関数を返します.randintと異なり、戻り値は整数の小数ではありません.uniform(a, b)χa≦N≦bを満たす任意の小数Nを返す.
datetimeモジュールimport datetime「日付」と「時間」を持つ様々な「クラス」.
ex)
pi_day = datetime.datetime(2020, 3, 14, 13, 6, 15)
print(pi_day)
print(type(pi_day))
>>>
2020-03-14 13:06:15
<class 'datetime.datetime'>

오늘 날짜
today = datetime.datetime.now()
print(today)
print(type(today))
timedelta
日付値間の期間
today = datetime.datetime.now()
pi_day = datetime.datetime(2020, 3, 14, 13, 6, 15)
print(today - pi_day)
print(type(today - pi_day))
>>>
22 days, 4:42:57.360266
<class 'datetime.timedelta'>
その他
today = datetime.datetime.now()
my_timedelta = datetime.timedelta(days=5, hours=3, minutes=10, seconds=50)

print(today)
print(today + my_timedelta)
>>>
2020-04-05 17:54:24.221660
2020-04-10 21:05:14.221660
datetimeから特定の値を抽出する
today = datetime.datetime.now()

print(today)
print(today.year)  # 연도
print(today.month)  # 월
print(today.day)  # 일
print(today.hour)  # 시
print(today.minute)  # 분
print(today.second)  # 초
print(today.microsecond)  # 마이크로초
フォーマットdatetime
today = datetime.datetime.now()

print(today)
print(today.strftime("%A, %B %dth %Y"))
>>>
2020-04-05 18:09:55.233501
Sunday, April 05th 2020
書式コード
26.Input&randomデジタルクイズゲーム
import random

# 코드를 작성하세요.
correct_answer = random.randint(1, 20)
chance = 4
attempt = 0
user_answer = -1
while user_answer != correct_answer and attempt < chance:
    user_answer = int(input("기회가 {}번 남았습니다. 1-20 사이의 숫자를 맞혀 보세요: ".format(chance-attempt)))
    attempt += 1

    if user_answer > correct_answer:
        print("Down")
    elif user_answer < correct_answer:
        print("Up")

if user_answer == correct_answer:
    print("축하합니다. {}번 만에 숫자를 맞히셨습니다.".format(attempt))
else:
    print("아쉽습니다. 정답은 {}입니다.".format(correct_answer))
27.ファイルの読み書きwith open('fileName.txt', 'r') as f://open(「ファイルパス」,「読み出しモード」)と変数「f」に格納print(type(f)) <class '_io.TextIOWrapper'>改行n注意.
strip
前後のスペースを削除します.
ex) print(" abc def ".strip()) abc defreplace
すべてのスペースを削除
ex) print(" abc def ".replace(" ", "")) abc defsplit
文字列の分割
ex) my_string = "1. 2. 3. 4. 5. 6"
print(my_string.split(". "))
注意する.Splitを使用した結果値は常に文字列!!
に質問平均売上高を求める.
chicken.txtファイルには以下のような売上高が記録されている.平均売上高を求める.
1일: 453400
2일: 388600
.
.
.
30일: 385600
31일: 472300
with open('data/chicken.txt', 'r') as f:
    total_revenue = 0
    total_days = 0
    
    for line in f:
        data = line.strip().split(': ')
        revenue = int(data[1])

        total_revenue += revenue
        total_days += 1
    
    print(total_revenue / total_days)
書き込み
with open('new_file.txt', 'w') as f:
    f.write("Hello world!\n")
		f.write("My name is Yong Lee\n")

with open('new_file.txt', 'a') as f: // a: append 추가
    f.write("Hello world!\n")
		f.write("My name is Yong Lee\n")
// 단어장 만들기
with open('vocabulary.txt', 'w') as f:
    while True:
        english_word = input('영어 단어를 입력하세요: ')    
        if english_word == 'q':
            break
        
        korean_word = input('한국어 뜻을 입력하세요: ')
        if korean_word == 'q':
            break
        
        f.write('{}: {}\n'.format(english_word, korean_word))
//단어장 2. 퀴즈
with open('vocabulary.txt', 'r') as f:
    for line in f:
        data = line.strip().split(": ")
        english_word, korean_word = data[0], data[1]
        
        # 유저 입력값 받기
        guess = input("{}: ".format(korean_word))
        
        # 정답 확인하기
        if guess == english_word:
            print("정답입니다!\n")
        else:
            print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))
//단어장 3. 고급
import random

# 사전 만들기
vocab = {}
with open('vocabulary.txt', 'r') as f:
    for line in f:
        data = line.strip().split(": ")
        english_word, korean_word = data[0], data[1]
        vocab[english_word] = korean_word

# 목록 가져오기
keys = list(vocab.keys())

# 문제 내기
while True:
    # 랜덤한 문제 받아오기
    index = random.randint(0, len(keys) - 1)
    english_word = keys[index]
    korean_word = vocab[english_word]
    
    # 유저 입력값 받기
    guess = input("{}: ".format(korean_word))
    
    # 프로그램 끝내기
    if guess == 'q':
        break
    
    # 정답 확인하기
    if guess == english_word:
        print("정답입니다!\n")
    else:
        print("아쉽습니다. 정답은 {}입니다.\n".format(english_word))