我是Python編程的初學者,並且遇到了與我當前任務相關的問題。作業內容如下:Python大師遊戲難題
- 您的程序應該暗中生成一個4位數的數字(或只包含數字,4個字符長的字符串),其中沒有數字重複。
- 然後,程序應該要求用戶輸入代碼猜測。用戶的猜測應該是4個字符長,僅包含數字,不重複任何數字。評分前,您的程序應驗證輸入是否有效,並在必要時提示用戶重新輸入。無效輸入不計入代碼破解器的猜測次數。您的代碼可能會忽略(剝離)輸入中的前導空白或尾隨空白,但應將內部空間計爲不正確的輸入。
- 在每一回閤中,打印轉數並得到用戶的猜測。如果輸入有效,回合的輸出應該是用戶的猜測,然後是反饋。反饋是一個4個字符的字符串:'X'表示每個數字在正確的位置; 'O'表示代碼中的每個數字,但不在正確的位置; ' - '爲所有其他人。請注意,X和O應該在一起;反饋只是每種類型有多少釘,而不是哪些釘或哪些釘。
- 保持所有猜測和反饋的歷史記錄,因此可以在每一回閤中爲用戶打印。
現在我只關注作業的「反饋」部分。我的代碼是目前:
import random
def validateInput():
inputGuess = input("Enter your guess as 4 numbers:")
while True:
if len(inputGuess) != 4:
inputGuess = input("Enter your guess as 4 numbers:")
else:
numberList = list(inputGuess) ##
invalidNumbers = False
for number in numberList:
if number not in ['1','2','3','4','5','6','7','8','9']:
invalidNumbers = True
if invalidNumbers == True:
print ("Possible numbers are 1, 2, 3, 4, 5, 6, 7, 8, 9.")
inputGuess = input("Enter your guess as 4 numbers:")
else:
return numberList
guessesRemaining=10
code=['1','2','3','4']
while guessesRemaining > 0:
report=[]
guess=validateInput()
guessesRemaining -= 1
if guess[0] == code[0]:
report.append("X")
if guess[1] == code[1]:
report.append("X")
if guess[2] == code[2]:
report.append("X")
if guess[3] == code[3]:
report.append("X")
tempCode=sorted(code)
tempGuess=sorted(guess)
if tempCode[0]==tempGuess[0]:
report.append("O")
if tempCode[1]==tempGuess[1]:
report.append("O")
if tempCode[2]==tempGuess[2]:
report.append("O")
if tempCode[3]==tempGuess[3]:
report.append("O")
report2=report[0:4]
dash=["-","-","-","-"]
report3=report2+dash
report4=report3[0:5]
print(report4)
例如,如果用戶想1879的代碼是1234,我收到「×○ - 」但我想收到「X ---」。此外,任何關於精簡我的代碼的建議都會很棒。爲了簡單起見,我現在只是[1,2,3,4]製作了「隨機代碼」。
這不正確處理案件[1,2,3,4] [2,7,8,9]。 – Jerome 2013-03-26 22:33:33
哦,對不起。自從我玩過Mastermind已經很久了。我會刪除/審查/可能取消刪除。 – svk 2013-03-26 22:36:04
編輯,應該現在工作。作爲lambda表達式將不再是非常漂亮的。 – svk 2013-03-26 22:44:24