亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建一個將數字轉換為字母的函數

創建一個將數字轉換為字母的函數

湖上湖 2023-12-29 14:40:29
我編寫了這個函數,它應該通過用戶提供的字符串(如 )1-3-5,并輸出相應的一系列字母,其中 A 分配給 1,B 分配給 2,C 分配給 3 等。輸出的情況1-3-5是ACE. 對于2-3-4,它應該打印BCD。對于?-3-4或者--3-4它仍然應該打印BCD.這是我到目前為止編寫的代碼:def number_to_letter(encoded):    result = ""    start = 0    for char in range(len(encoded)):        if encoded[char] == '-':            i = encoded.index("-")            sub_str = encoded[start:i]            if not sub_str.isdigit():                result += ""            else:                letter = chr(64 + int(sub_str))                if 0 < int(sub_str) < 27:                    result += letter                else:                    result += ""            start += len(sub_str) + 1    return resultprint(num_to_let('4-3-25'))我的輸出是D,當它應該是的時候DCY。我試圖在不使用任何列表或使用該split函數的情況下執行此操作,只需查找-子字符串中的字符并將其前面的數字轉換為字母即可。我能做些什么?
查看完整描述

4 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

你可以嘗試做這樣的事情:


def number_to_letter(encoded):

    result  = ""

    buffer = ""

    for ch in encoded:

        if ch == '-':

            if buffer and 0 < int(buffer) < 27:

                result += chr(64 + int(buffer))

            buffer = ""

        elif ch.isdigit():

            buffer += ch

    else:

        if buffer and 0 < int(buffer) < 27:

            result += chr(64 + int(buffer))

        return result 


print(number_to_letter('1-3-5'))

輸出:


ACE

解釋:


我們循環每個字符并將其添加到某個緩沖區中。當我們遇到-(分隔符)時,我們嘗試解析緩沖區并重置它。最后我們再進行一次相同的解析并返回結果。


驗證的工作方式是,每當我們填充緩沖區時,我們都會檢查數字有效性(使用.isdigit()),并且當我們解析緩沖區時,我們會檢查范圍約束。


查看完整回答
反對 回復 2023-12-29
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

沒有清單,好吧。但是聽寫呢?


def abc(nums):

    d = {'-':'','1':'A','2':'B','3':'C','4':'D','5':'E','6':'F','7':'G','8':'H','9':'I','0':'J'}

    res = ''

    for n in nums: res += d[n]

    return res

    

print(abc('1-2-3-9-0')) # Output: ABCIJ

這是一個更正的版本:


def abc(nums):

    d = {'-':'','1':'A','2':'B','3':'C','4':'D','5':'E','6':'F','7':'G','8':'H','9':'I','0':'J'}

    res = ''

    for n in nums:

        if n in d:

            res += d[n]

    return res


print(abc('?-2-3-9-0')) # Output: BCIJ


查看完整回答
反對 回復 2023-12-29
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

這段代碼的方法是找到第一個“-”,然后將其存儲在哪里,這樣下次我們就可以在最后一個“-”之后查找第一個“-”


當我的代碼中的注釋談論循環時意味著要經歷一次循環(循環時:)


def number_to_letter(encoded):

    letterString = ""

    startSubStr = 0

    endSubStr = 0

    looping = True


    while looping:

        if endSubStr > (len(encoded)-4):# if we're at the last number we don't look for '-'. we go to the end of the str and end the loop

            endSubStr = len(encoded)

            looping = False

        else:

            endSubStr = encoded.index('-', startSubStr) #find the first '-' after the '-' found in the last cycle


        number = int(encoded[startSubStr:endSubStr]) #get the number between the '-' found in the last cycle through this loop and the '-' found in this one

        if number < 27:

            letter = chr(64 + int(number))

            letterString += letter


        startSubStr = endSubStr + 1 #set the start of the substring to the end so the index function doesn't find the '-' found in this cycle again 


    return letterString


print(number_to_letter("23-1-1-2")) #>>> WAAB

結果:WAAB


查看完整回答
反對 回復 2023-12-29
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

import string


alphabet = list(string.ascii_lowercase)

combination = "1-2-3"


def seperate(s, sep='-'):

    return [s[:s.index(sep)]] + seperate(s[s.index(sep)+1:]) if sep in s else [s]


combination = seperate(combination)


print("".join([alphabet[int(i)-1] for i in combination]))


查看完整回答
反對 回復 2023-12-29
  • 4 回答
  • 0 關注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號