[英]How do I make a 'while' loop print the results of the loop's conditional into a single line(concatenated)?
所以這是我的代碼:
test = {
'a':1, 'b':2 , 'c':3 , 'd':4
}
x = raw_input("Type 'abcd' ")
y = len(x)
z = 1
while z < y+1:
a = x[z-1]
print test[a]
z = z + 1
關鍵是要制作一個基本的編碼器,顯然,該代碼只是建立一個我可以建立的准代碼。 我的問題是這樣的:
我無法將'while'循環的結果打印到一行中,並且不僅要打印到一行中,而且還要連接成一個更大的整數(或字符串),例如代碼顯示字母而不是整數,以根據這些字母創建字符串)。 盡管在此代碼中,我特別希望代碼的結果為整數' 1234 '。 不:
1
2
3
4
從本質上講,我的問題是:我如何以這種方式打印while循環的結果,使它們連接整數(或字母)以創建更大的數字(或字符串)? 我不要結果1 2 3 4
變為10,但我希望它成為整數1234 。 我在網上看過,但找不到適合我的任何東西。 實際上我什么都沒找到。
首先, while
此處使用while
循環並不是最佳選擇,而是使用for
循環,該循環旨在循環遍歷數據結構之類的迭代器(字符串只是一個字符序列):
for character in x:
print(test[character])
然后,不打印字符,而是將它們存儲在列表中。
characters = []
for character in x:
characters.append(str(test[character]))
然后,我們可以將它們連接到單個字符串中(為了使此步驟更容易,我們將數字字符串設置為更早),然后從該字符串中創建一個int
:
int("".join(characters))
Python支持一種更簡單的方法來進行這種列表構建- 列表理解 :
characters = [str(test[character]) for character in x]
這將產生與上面的for循環相同的列表,但更快,更簡潔。
這意味着我們可以將您的程序編寫為:
test = {'a': 1, 'b': 2 , 'c': 3 , 'd': 4}
user_input = raw_input("Type 'abcd':")
number = int("".join(str(test[character]) for character in user_input))
作為將數字字符串連接起來然后返回的替代方法,我們也可以使用數學方法:
number = sum((10 ** power) * test[character]
for power, character in enumerate(reversed(user_input)))
我們在這里所做的就是從右邊開始,將每個數字乘以其所在列的十的冪,然后求和。
一個簡單的答案是:不要在while
循環中打印,而是將一個字符串連接起來在最后打印:
result = ''
while z < y+1:
a = x[z-1]
result += str(test[a])
z = z + 1
print result
如果有一堆東西,而不是動態地連接字符串,請使用list
並在最后join
:
result = []
while z < y+1:
a = x[z-1]
result.append(str(test[a]))
z = z + 1
print ''.join(result)
但是你說你想得到一個整數。 除了打印出來之外,您是否需要該整數嗎? 如果是這樣,您可以構建一個字符串,然后將其轉換為整數:
result = []
while z < y+1:
a = x[z-1]
result.append(str(test[a]))
z = z + 1
val = int(''.join(result))
但是,這很愚蠢。 為什么不首先將值建立為整數?
val = 0
while z < y+1:
a = x[z-1]
val = val * 10 + test[a]
z = z + 1
由於您似乎正在使用Python 2,因此不添加換行符而進行打印的唯一方法是添加空格,這無濟於事。 但是Python 3和帶有from __future__ import print_function
Python 2具有更靈活的選擇:
while z < y+1:
a = x[z-1]
print(test[a], end='')
z = z + 1
print()
或者您可以直接write
stdout
:
while z < y+1:
a = x[z-1]
sys.stdout.write(str(test[a]))
z = z + 1
sys.stdout.write('\n')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.