私は 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 の場合、"XO --" を受信しますが、"X---" を受信したいと考えています。また、私のコードを合理化するためのアドバイスは素晴らしいでしょう. 簡単にするために、ここでは「ランダム コード」を [1,2,3,4] だけにしました。