在Python 3中,有一種簡單的方法可以在沒有換行符的情況下打印字符,但在Python 2中沒有。 *所以,要做到這一點最簡單的方法是建立字符串,然後在最後打印:
result = ''
for blah in range(len(seq)): #Apologies for the lame variable names
x = random.randint(0,length - 1)
result += seq[x]
print result
*有兩種少簡單的方法:你可以使用from __future__ import print_function
,然後使用Python 3 print
語法而不是Python 2,或者您可以對每個字符使用sys.stdout.write(seq[x])
,然後在末尾使用sys.stdout.write('\n')
和sys.stdout.flush()
。但我不認爲你想要這些。
不過,也有一些方法來改善這一點:
- 使用
randrange(length)
,而不是randint(0, length - 1)
。
- 使用
random.choice(seq)
代替首先使用randrange
或randint
。
- 使用
_
而不是blah
作爲「無關」變量。 *
- 如果你不關心你正在迭代什麼,只是你爲每個字符迭代一次,只是做
for _ in seq:
,而不是for _ in range(len(seq)):
。
- 建立一個列表的字母,然後在最後調用
''.join()
,而不是建立一個字符串。
- 使用理解而不是顯式循環。
把所有在一起:
print ''.join(random.choice(seq) for _ in seq)
*除非你使用gettext
的國際化,還是其他什麼東西,讓_
特殊的意義。大多數那些提出自己的「不關心」名稱的項目可能是__
或dummy
。當然,只要你持續使用它,blah
就可以適用於這樣的項目。
至於重複它,你的頭腦newbish是正確的;只需使用一個循環。例如(在服用第二個版本,但它會很好的工作與第一):
n = 4
for _ in range(n):
print ''.join(random.choice(seq) for _ in range(len(seq)))
這會打印出4個不同的隨機字符串。如果您將n
設置爲100,則會打印100個不同的隨機字符串。
你可能想在函數中這樣寫:
def print_random_strings(seq, n):
for _ in range(n):
print ''.join(random.choice(seq) for _ in range(len(seq)))
然後你可以這樣調用它:
print_random_strings(seq, 4)
但無論哪種方式,你的基本的直覺是正確的軌道上。
你想它與空間的一個線之間,或沒有? – abarnert
請不要有空格!謝謝 –
作爲一個方面說明,當Python迫使你給一個你不關心的東西命名時,不用命名它'blah',通常的約定就是將它命名爲'_'。 (除非你使用'gettext'或類似的i18n,它給'_'一個特殊的含義,在這種情況下你的項目可能有自己的約定 - 也許是'__'或'dummy'-你應該遵循。) – abarnert