2014-12-21 163 views
1

我正在嘗試編寫一個程序,該程序會生成用於在正在處理的遊戲上註冊帳戶的密鑰。
到目前爲止,我已經掌握了所有與打印相關的工作,但是在嘗試寫入文件時仍然卡住了。在Python中寫入同一行文件

這是我當前的代碼:

import random 
file = open('keys.txt', 'w') 
chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
keys = 0 
while keys <= 50: 
    for i in range(0,4): 
     print(random.choice(chars), end='') 
    print('-', end='') 
    for i in range(0,4): 
     print(random.choice(chars), end='') 
    print('-', end='') 
    for i in range(0,4): 
     print(random.choice(chars), end='') 
    print('-', end='') 
    for i in range(0,4): 
     print(random.choice(chars), end='') 
    print('')  
    keys += 1 
file.close() 

爲了得到它打印到文件,我嘗試添加file.write(random.choice(chars), end='')在打印的循環之下,但是我有一個TypeError說write() takes no keyword arguments

爲了澄清,代碼是這樣的:

for i in range(0,4): 
    print(random.choice(chars), end='') 
    file.write(random.choice(chars), end='') 
print('-', end='') 

從摸索,我認爲這個問題是在file.write的end=''做的,但我不能肯定。有任何想法嗎?

在此先感謝。

+0

請注意,您的程序有一個錯誤。 '10'不是單個字符。 –

回答

2

print函數將其參數加上行尾寫入文件。由於在某些情況下,您不希望行結束,因此您可以通過明確說明print("string", end = '')來覆蓋此默認參數

write函數只寫入它的參數。它不知道線條結束或其他魔法。所以你一定不要傳這樣一個額外的說法。

如果您的程序壽命更長,您應該將其構造得更清潔。以下代碼還修復了您的「字符」10,這實際上是2個字符。

import random 
import string 

def generateRandomKey(): 
    alphabet = string.ascii_uppercase + string.digits 
    rnd = ''.join(random.choice(alphabet) for _ in range(16)) 
    return '%s-%s-%s-%s' % (rnd[0:4], rnd[4:8], rnd[8:12], rnd[12:16]) 

file = open('keys.txt', 'w') 
for _ in range(50): 
    file.write('%s\n' % generateRandomKey()) 
file.close() 
0

端= 「」打印函數的參數,而不是寫

不過你可以試試這個:

file.write(str(random.choice(chars))+"\n") 

它設置爲正確的位置,然後將其打印出來像打印功能。

+0

啊,認爲這是問題所在。我怎麼能打印到文件寫入同一行然後,像'end ='''會在打印功能? – pythagon

+0

你想跟他們並列? – GLHF

+1

'write()'默認不添加換行符。所以,如果你想要一個新的行,你明確地包含它。 – jgritty

0

好了,所以,我想生成16個數字鍵,我寫的4個字符塊與短劃線文件中之間,然後在我的結束for循環塊做file.write('\n')

感謝您的回答大家,他們非常樂於助人!