簡體   English   中英

在Python中將整數字符串轉換為整數

[英]Turning an integer string to an integer in Python

我試圖用python編寫程序,方法是先將輸入的單詞轉為Morse,然后將點和破折號更改為1和0,將其視為二進制數,從而對項目進行編碼。這是一個代碼段:

def mimary_encode(input):
if input.find('!')!=-1 or input.find('@')!=-1 or input.find('#')!=-1 or input.find('$')!=-1 or input.find('%')!=-1 or input.find('^')!=-1 or input.find('&')!=-1 or input.find('*')!=-1 or input.find('(')!=-1 or input.find(')')!=-1 or input.find('_')!=-1 or input.find('-')!=-1 or input.find('=')!=-1 or input.find('+')!=-1 or input.find('.')!=-1 or input.find('"')!=-1 or input.find("'")!=-1 or input.find(',')!=-1 or input.find(' ')!=-1 or input.find(';')!=-1 or input.find(':')!=-1 or input.find('[')!=-1 or input.find(']')!=-1 or input.find('{')!=-1 or input.find('}')!=-1 or input.find('?')!=-1 or input.find('<')!=-1 or input.find('>')!=-1:
    print "Inputs cannot contain spaces or symbols"
else:base=input
nol=len(input)
if base.find("a")!=-1:
    base=base.replace("a",".-")
if base.find("b")!=-1:
    base=base.replace("a","-...")
if base.find("c")!=-1:
    base=base.replace("c","-.-.")
if base.find("d")!=-1:
    base=base.replace("d","-..")
if base.find("e")!=-1:
    base=base.replace("e",".")
if base.find("f")!=-1:
    base=base.replace("f","..-.")
if base.find("g")!=-1:
    base=base.replace("g","--.")
if base.find("h")!=-1:
    base=base.replace("h","....")
if base.find("i")!=-1:
    base=base.replace("i","..")
if base.find("j")!=-1:
    base=base.replace("j",".---")
if base.find("k")!=-1:
    base=base.replace("k","-.-")
if base.find("l")!=-1:
    base=base.replace("l",".-..")
if base.find("m")!=-1:
    base=base.replace("m","--")
if base.find("n")!=-1:
    base=base.replace("n","-.")
if base.find("o")!=-1:
    base=base.replace("o","---")
if base.find("p")!=-1:
    base=base.replace("p",".--.")
if base.find("q")!=-1:
    base=base.replace("q","--.-")
if base.find("r")!=-1:
    base=base.replace("r",".-.")
if base.find("s")!=-1:
    base=base.replace("s","...")
if base.find("t")!=-1:
    base=base.replace("t","-")
if base.find("u")!=-1:
    base=base.replace("u","..-")
if base.find("v")!=-1:
    base=base.replace("v","...-")
if base.find("w")!=-1:
    base=base.replace("w",".--")
if base.find("x")!=-1:
    base=base.replace("x","-..-")
if base.find("y")!=-1:
    base=base.replace("y","-.--")
if base.find("z")!=-1:
    base=base.replace("z","--..")
if base.find("1")!=-1:
    base=base.replace("1",".----")
if base.find("2")!=-1:
    base=base.replace("2","..---")
if base.find("3")!=-1:
    base=base.replace("3","...--")
if base.find("4")!=-1:
    base=base.replace("4","....-")
if base.find("5")!=-1:
    base=base.replace("5",".....")
if base.find("6")!=-1:
    base=base.replace("6","-....")
if base.find("7")!=-1:
    base=base.replace("7","--...")
if base.find("8")!=-1:
    base=base.replace("8","---..")
if base.find("9")!=-1:
    base=base.replace("9","----.")
if base.find("0")!=-1:
    base=base.replace("0","-----")
if base.find("-")!=-1:
    base=base.replace("-","0")
if base.find(".")!=-1:
    base=base.replace(".","1")
int(base)


mimary_encode("hi")

我知道這可能不是編寫它的最佳方法,但是問題是python一直給我的錯誤是:

Traceback (most recent call last):
  File "C:/Documents and Settings/Moshe's Programming/Desktop/Python       
Projects/Mimary/Mimary attempt 1.py", line 86, in <module>
    mimary_encode("hi")
  File "C:/Documents and Settings/Moshe's Programming/Desktop/Python         
Projects/Mimary/Mimary attempt 1.py", line 83, in mimary_encode
print base + 1
TypeError: cannot concatenate 'str' and 'int' objects

這個錯誤是什么意思? 如何解決此錯誤? 我已經把基數變成整數了,不是嗎?

盡管您的代碼被徹底搞砸了,但是它可以工作。 但是,由於行int("base")引發了您的第一個錯誤。

如果編寫int("base") ,則試圖將字符串“ base”轉換為整數,這是不可能完成的。

然后,您將代碼更改為print base + 1 ,這也是不可能的,一旦base是一個string並且您不能用+號將字符串和整數相加。 因此,您要做的是:

def mimary_encode(base): 
    #Dowhateveryouwant
    return int(base) #Only if you are sure base contains only integers
print mimary_encode("hi")

錯誤來自print base + 1 ,其中base是一個字符串,1是一個整數。

這是您的功能的替代實現。 首先,我將摩爾斯電碼定義為字典。 在函數中,我首先將所有字母都轉換為小寫。 然后, get字典中存在莫爾斯電碼值,則使用get dictionary函數返回它的莫爾斯電碼值;否則,使用空字符串對其進行過濾。 這與過濾不良數據的原始方法不同。 在這里,我只查找字典中的數據。 最后,我使用生成器將編碼后的字母組合在一起: code = " ".join((morse.get(c, "") for c in input_string))與列表理解相似,但對大型字符串更有效。

from string import letters

msg = 'I hear 13 knights from the Round Table are here!!!'

def mimary_encode(input_string):
    input_string = ''.join([c.lower() if c in letters else c
                            for c in input_string])
    code = " ".join((morse.get(c, "") for c in input_string))
    return code

morse = {
 '0': '-----',
 '1': '.----',
 '2': '..---',
 '3': '...--',
 '4': '....-',
 '5': '.....',
 '6': '-....',
 '7': '--...',
 '8': '---..',
 '9': '----.',
 'a': '.-',
 'b': '-...',
 'c': '-.-.',
 'd': '-..',
 'e': '.',
 'f': '..-.',
 'g': '--.',
 'h': '....',
 'i': '..',
 'j': '.---',
 'k': '-.-',
 'l': '.-..',
 'm': '--',
 'n': '-.',
 'o': '---',
 'p': '.--.',
 'q': '--.-',
 'r': '.-.',
 's': '...',
 't': '-',
 'u': '..-',
 'v': '...-',
 'w': '.--',
 'x': '-..-',
 'y': '-.--',
 'z': '--..'}

編碼消息(之前定義為msg ):

>>> mimary_encode(msg)
'.. .... . .- .-. .---- ...-- -.- -. .. --. .... - ... ..-. .-. --- -- - .... . .-. --- ..- -. -.. - .- -... .-.. . .- .-. . .... . .-. .'

給定字典的一對一映射,您可以使用字典理解來將其反轉:

reverse_morse = {v: k for k, v in morse.iteritems()}

然后,您可以反轉摩爾斯電碼,將其轉換回字母/數字字符串。

>>> ''.join([reverse_morse.get(c, "") for c in mimary_encode(msg).split(" ")])
'ihear13knightsfromtheroundtablearehere'

請注意,所有字母都轉換為小寫,並且感嘆號已被刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM