[英]Python — Iterating Through Two Lists Simultaneously
我正在嘗試為我編寫的密碼制作翻譯器,它需要能夠並排檢查 2 個列表,但我的程序不返回任何輸出。
def encrypt(message, key):
for i in range(len(message)):
ans = ""
char = message[i]
if(char == 1):
for j in range(len(key)):
if(key[j] == 1):
ans = 'a'
if(key[j] == 0):
ans = 'c'
if(char == 0):
for j in range(len(key)):
if(key[j] == 1):
ans = 'd'
if(key[j] == 0):
ans = 'b'
return ans
print(encrypt(str(1010), str(1100)))
我希望它輸出“adcb”。 我認為我把 return 語句放在哪里有問題? 我不知道。
看起來你想循環兩個等長的字符串,只包含字符'0'
和'1'
,如果那個位置的兩個字符都是'1'
,你想返回一個包含'a'
的等長字符串輸入等
所以,像這樣:
def encrypt(message, key):
code = {('1', '1'): 'a', ('1', '0'): 'c', ('0', '1'): 'd', ('0', '0'): 'b'}
return ''.join(
code[(m, k)] for m, k in zip(message, key)
)
print(encrypt('1010', '1100'))
結果:
adcb
並提供您嘗試使用循環和索引(這不是很pythonic)的“固定”版本:
def encrypt(message, key):
ans = ''
for i in range(len(message)):
m = message[i]
k = key[i]
if m == '1':
if k == '1':
ans += 'a'
if k == '0':
ans += 'c'
if m == '0':
if k == '1':
ans += 'd'
if k == '0':
ans += 'b'
return ans
請注意,我已經刪除了多余的括號和導致錯誤結果的額外循環。
您可以進一步簡化:
def encrypt(message, key):
ans = ''
for i in range(len(message)):
if message[i] == '1':
if key[i] == '1':
ans += 'a'
else:
ans += 'c'
else:
if key[i] == '1':
ans += 'd'
else:
ans += 'b'
return ans
從那里:
def encrypt(message, key):
ans = ''
for m, k in zip(message, key):
if m == '1':
if k == '1':
ans += 'a'
else:
ans += 'c'
else:
if k == '1':
ans += 'd'
else:
ans += 'b'
return ans
作為額外的獎勵,這里有一個粗糙的單行代碼,它有點過分了,超越了 Pythonic:
def encrypt(message, key):
return ''.join('bdca'[int(m)*2 + int(k)] for m, k in zip(message, key))
問題在於條件語句char == 1
和char == 0
。 由於字符串和整數是兩種不同的數據類型,條件語句的計算結果為False
並且內部 for 循環永遠不會運行,因此該函數不返回任何輸出。 要解決此問題,請將它們更改為char == '1'
和char == '0'
。 相同的規則適用於 key[j] == 1 和 key[j] == 0,因為 key 作為字符串傳遞到函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.