簡體   English   中英

如何使“ while”循環將循環的條件結果打印到一行(連接的)中?

[英]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.

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