TIL 4. DashInsert関数の作成


1.質問


DashInsert関数には、数値からなる文字列を入力した後、文字列の奇数が連続している場合は、2つの数値の間に-を追加し、偶数が連続している場合は*を追加する機能があります.DashInsert関数を完了します.
入力例:4546793
出力例:454*67-9-3

2.私の回答

def DashInsert():
    num = input("숫자를 입력해주세요: ")
    lst = list(num)
    for i in lst:
        if int(i) % 2 == 1 and int(lst[lst.index(i)+1]) % 2 == 1:
            lst.insert(lst.index(i)+1, "-")
        elif int(i) % 2 == 0 and int(lst[lst.index(i)+1]) % 2 == 0:
            lst.insert(lst.index(i)+1, "*")
        else: 
            pass
    for j in lst:
        print(j,end="")
    
DashInsert()

考慮事項

  • input関数の出力結果は文字型であるため、式に含める場合は整数をintに変換する必要がある.
  • list関数でリスト形式に変換し、for文でリスト値を1つずつ返します.
  • for文には、連続奇数か連続偶数かを判断するif文が書き込まれている.
  • 更新後のリストを他のfor文を使用して空白のない列で出力します.
  • コード解釈


  • def DashInsert():
    num=input(「数値を入力してください:」)
    lst = list(num)
    まずDashInsert関数を作成しました.
    ユーザーが入力したinput関数を追加し、新しい変数numとして宣言します.
    numはlist関数をlist関数に変換します.
    現在、最初に入力された文字形式の数字はリスト内の値に分かれている.

  • for i in lst:
    リストの値を順番に読み込み、

  • if int(i) % 2 == 1 and int(lst[lst.index(i)+1]) % 2 == 1:
    現在の値(i)と次の値をそれぞれ2で割った場合、残りの値は1(=奇数)です.
    -次の値を認識する方法
    リストのインデックスが使用されています.現在のインデックスlst.index(i)に+1を加えると、次のインデックスになります.次のインデックスの値はlst[lst.index(i)+1]と表示されます.
    -リスト内の値はテキスト形式であるため、現在値と次の値をintでそれぞれ整数として表す.

  • lst.insert(lst.index(i)+1, "-")
    次のインデックス値に-を挿入します.

  • elif int(i) % 2 == 0 and int(lst[lst.index(i)+1]) % 2 == 0:
    lst.insert(lst.index(i)+1, "*")
    残りの値を0に変更して偶数を表す場合.

  • else : pass
    連続奇数または連続偶数ではない(奇数と偶数の場合)passによって次のステップが行われます.

  • for j in lst: print(j,end="")
    別のfor文を使用して、追加した値を再定義したリストをスペースなしで1行に出力します.
  • 出力結果と無視点


    しかし、出力結果はValueErrorと表示され、以下のように表示されます.

    文の繰り返し中に現在のインデックスの次の番号に-または*を追加すると、次のインデックスは既存の数値ではなく-または*になります.ifクエリー条件では、リストの値をint関数を用いて整数化するように表します.しかし-私*が入った瞬間に「タイプエラー」(ValueError)が発生します.

    3.模範解答

    data = "4546793"
    
    numbers = list(map(int,data)) #숫자 문자열을 숫자 리스트로 변경
    result = []
    
    for i, num in enumerate(numbers):
    	result.append(str(num))
        if i < len(numbers)-1:			#다음 수가 있다면
        	is_odd = num % 2 == 1 			#현재 수가 홀수
            is_next_odd = numbers[i+1] % 2 == 1	#다음 수가 홀수
            if is_odd and is_next_odd:		#연속 홀수
            	result.append("-")
            elif not is_odd and not is_next_odd:	#연속 짝수
            	result.append("*")
                
    print("".join(result))

  • data = "4546793"
    入力する数値をデータ変数にします.

  • numbers = list(map(int,data))
    map関数にint関数を加え、文字列をそれぞれの数値形式に変換します.そしてそれをリストに並べます.

  • for i, num in enumerate(numbers): result.append(str(num))
    enumerate
    インデックスと値を返すPython内蔵関数.インデックスが出力されるため、この関数の入力値パケットには順序のリストまたは凡例が含まれます.
    iはインデックスでnumはリストの値です.
    数値リストの値を結果リストに文字で追加します.

  • if i < len(numbers)-1:
    is_odd = num % 2 == 1
    is_next_odd = numbers[i+1] % 2 == 1
    インデックス番号を表すiは0から始まり、len関数は1単位で文字長を計算するので、lenには1を減算した値が含まれます.
    is oddは、現在の値が奇数であることを示す.
    次の値が奇数であるかどうかを示す2つの変数をis next oddで作成します.

  • if is_odd and is next_odd: result.append("-")
    elif not is_odd and not is_next_odd: result.append("")
    is oddとis next oddが両方とも真(奇数)の場合、結果リストに-を追加します.
    is oddとis next oddの両方が偽(偶数)である場合、結果リストに追加します.

  • print("".join(result))
    結果リストをスペースなしで1行に出力します.