簡體   English   中英

合並兩個帶有備用字符的字符串作為輸出

[英]Merge two strings with alternate chars as output

我得到的任務是交替組合具有相同長度的兩個字符串的字母。

例如:

Inputstring 1: "acegi"

Inputstring 2: "bdfhj"

Outputstring: "abcdefghij"

當我運行代碼時遇到以下問題。

Traceback (most recent call last):  
  File "...", line 14, in <module>
    x =x+f
TypeError: must be str, not int

我認為每個相關變量都是String

s=str(input("Input first String:"))
v=str(input("Input second String:"))
x=""
c=1
z=""
f=""
laenge=len(s)
lenge=len(v)

for f in range(laenge):

    if f in range(c,c+1):
        x =x+f
for z in range(lenge):

    if z in range(c,c+1):
        x=x+z
c=c+1

print(x)

編程時應首先學習的一件事是使用有意義的變量名,而不是隱秘的1個字母的名稱。

您的代碼不在兩個輸入字符串之間交替。 您在第一個字符串中循環,然后在第二個字符串中循環,並且永不重復。

我不確定c變量的意義是什么。 您在腳本的開頭將其設置為1 ,然后在后面添加1,但是腳本結束。 是否應該圍繞所有這些代碼進行另一個循環?

檢查f是否在range(c, c+1)中的循環可能只是f = c ,沒有指向循環的意義。

錯誤來自

x = x + f

因為x是一個字符串, f是一個int 我懷疑你想做x = x + s[f]

整個事情可以大大簡化。

string1 = input("Enter string 1: ")
len1 = len(string1)
string2 = input("enter string 2: ")
len2 = len(string2)
if len1 != len2:
    print("Inputs must be the same length")
else:
    result = ""
    for i in range(len1):
        result += string1[i]
        result += string2[i]
    print(result)

您可以使用zipjoin在一行中完成此操作。

out1 = ''.join(''.join(f for f in tup) for tup in zip(inp1, inp2))

更實用的樣式:

out1 = ''.join(map(''.join, zip(inp1, inp2)))  # kudos @Coldspeed

兩者都打印

abcdefghij

降低代碼:

  • zip()

     pairs = list(zip(inp1, inp2)) print(pairs ) # [('a', 'b'), ('c', 'd'), ('e', 'f'), ('g', 'h'), ('i', 'j')] 
  • .join()

     temp = [] for sub in pairs: temp.append(''.join(sub)) print(temp) # ['ab', 'cd', 'ef', 'gh', 'ij'] 
  • 再次.join()

     out1 = ''.join(temp) print(out1) # abcdefghij 

最后,並且僅出於娛樂和學習目的,還有另外兩種較舊的方法:

out1 = ''
for i in range(len(inp1)):
    out1 += inp1[i] + inp2[i]

out1 = ''
for i, c in enumerate(inp1):
    out1 += c + inp2[i]

您的代碼中有幾個問題。 最重要的一個是您的命名問題。 給變量取個有意義的名字。

現在,順理成章。 您需要同時遍歷字符串,或者同時在兩個索引上使用索引,而不要一個接一個地索引。

您可以這樣做,以獲得更pythonic的方式。

first = input("Your first string.")
second = input("Your second string.")

if len(first) != len(second):
    print 'Bad length for the inputs.'
else:
    newString = ""
    for s1, s2 in zip(first, second):
        newString += s1 + s2
    print newString

只需將mapjoin結合使用即可獲得所需的結果:

"".join(map(lambda x,y: x+y, astr, bstr))

這里不需要zip ,因為可以提供2個字符串/列表來map具有帶有2個參數的lambda函數的map 另外, +符號可在此處連接2個字符串。

通過輸入獲取a和b,或者根據需要獲取。 無需復制。 關鍵是代碼。

a = 'acegi'
b = 'bdfhj'

c = ''
for i in range(len(a)):
    c += a[i] + b[i]

print(c)

結果是:

abcdefghij

暫無
暫無

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

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