Member 13672432 Ответов: 1

Как мне завершить этот фрагмент кода?


Я делаю игру под названием Codebreaker. 4-значный номер генерируется в то время как пользователь угадывает номер. Он должен выводить количество правильных цифр (до 4) в правильном месте и количество правильных цифр в неправильном месте (до 4). Есть 12 жизней и это то что я сделал до сих пор

import random

code=[random.randint(1,9), random.randint(0,9), random.randint(0,9), random.randint(0,9)]
code=[2, 3, 6, 3]
display_answer= ["X","X","X","X"]
guesses= 1
corrPlace= 0
wronPlace= 0

instructions= input("Welcome to Codebreaker! Would you like to see the instructions type 'Yes' or 'No' ")
if (instructions == "Yes") or (instructions == "yes"):
  print("I will randomly generate a 4 digit number, try and guess it using your keyboard.")
else:
  print("Alrighty")


mode= input("What mode would you like to play on? 'Easy', 'Medium' or 'Hard': ")
mode= mode.lower()
if mode== "easy":
  print("Let's get on with it!" )

  print('\n')
  print("I am thinking of a four digit number, try and guess that number!")
  
  while True:
    print("You have: " , 13 - guesses, " guesses left")
    guess = input("Have a guess! Type 'quit' to quit: ")
  
    if guess == "quit":
      print('\n')
      print("You quit! The number I was thinking of was: ")
      print(code)
      print('\n')
      print("xX !YOU LOSE! Xx")
      break
  
    elif len(guess) != 4:
      print("The code is 4 digits long! Go again.")
      print('\n')
      continue

    elif guess.isdigit()== False:
      print("Please type in a NUMBER guess!")
      print('\n')
      continue

    if guesses == 12:
      print("You have no guesses left...")
      print("The number I was thinking of was: ", code)
      print("xX !YOU LOSE! Xx")
      break
    guesses = guesses+1

    guess1= int(guess[0])
    guess2= int(guess[1])
    guess3= int(guess[2])
    guess4= int(guess[3])

    if guess1== code[0]:
      display_answer[0]= guess1
    if guess2== code[1]:
      display_answer[1]= guess2
    if guess3== code[2]:
      display_answer[2]= guess3
    if guess4== code[3]:
      display_answer[3]= guess4
    
    print("You have guessed this part correctly:")
    print(display_answer, '\n')

    if display_answer[0] != "X" and display_answer[1] != "X" and display_answer[2] != "X" and display_answer[3] != "X":
      print('\n')
      print("You won! The number I was thinking of was: ")
      print(code)
      print('\n')
      print("xX !YOU WON! Xx")
      break

elif mode== "medium":
    ###
    print('\n')
    print("I am thinking of a four digit number, try and guess that number!")
    print (code)
    
    while True:
      print("You have: " , 13 - guesses, " guesses left")
      guess = input("Have a guess! Type 'quit' to quit: ")
    ###

    ###
      if guess == "quit":
          print('\n')
          print("You quit! The number I was thinking of was: ")
          print(code)
          print('\n')
          print("xX !YOU LOSE! Xx")
          break
    ###

    ###
      elif len(guess) != 4:
        print("The code is 4 digits long! Go again.")
        print('\n')
        continue
    ###

    ###
      elif guess.isdigit()== False:
        print("Please type in a NUMBER guess!")
        print('\n')
        continue
    ###

    ###
      if guesses == 12:
        print("You have no guesses left...")
        print("The number I was thinking of was: ", code)
        print("xX !YOU LOSE! Xx")
        break
      guesses = guesses+1
    ###

    ###
      guess1= int(guess[0])
      guess2= int(guess[1])
      guess3= int(guess[2])
      guess4= int(guess[3])
    ###

    ####
      corrPlace= 0
      if guess1==code[0]:
          corrPlace= (corrPlace+1)
      if guess2==code[1]:
          corrPlace= (corrPlace+1)
      if guess3== code[2]:
          corrPlace= (corrPlace+1)
      if guess4== code[3]:    
          corrPlace= (corrPlace+1)
    ####

    #####
      wronPlace= 0
      if guess1=! code[0]:
        if guess1== code[1] or code[2] or code[3]:
          wronPlace= (wronPlace+1)
        
      if guess2=! code[1]:
        if guess2== code[0] or code[2] or code[3]:
          wronPlace= (wronPlace+1)

      if guess3!= code[2]:
        if guess3== code[0] or code[1] or code[3]:
          wronPlace= (wronPlace+1)

      if guess4!= code[3]:
        if guess4== code[0] or code[1] or code[2]:
          wronPlace= (wronPlace+1)

      if corrPlace== 4:
        wronPlace= 0

    #####

    ###
      print ("You have guessed ", corrPlace, " digits in the correct place.")
      print ("But there are ", wronPlace, " correct digits in the wrong place.")
      print ('\n')

      if corrPlace== 4:
          print('\n')
          print("You won! The number I was thinking of was: ")
          print(code)
          print('\n')
          print("xX !YOU WON! Xx")
          break
    ###

elif mode== "hard":
  print ("Under construction")


Проблема вот в чем:
#####
  wronPlace= 0
  if guess1=! code[0]:
    if guess1== code[1] or code[2] or code[3]:
      wronPlace= (wronPlace+1)

  if guess2=! code[1]:
    if guess2== code[0] or code[2] or code[3]:
      wronPlace= (wronPlace+1)

  if guess3!= code[2]:
    if guess3== code[0] or code[1] or code[3]:
      wronPlace= (wronPlace+1)

  if guess4!= code[3]:
    if guess4== code[0] or code[1] or code[2]:
      wronPlace= (wronPlace+1)

  if corrPlace== 4:
    wronPlace= 0


Он должен выводить до четырех цифр, но имитирует переменную corrPlace. План, который я сделал для этого куска кода, таков:
Цитата:
сравните код, чтобы угадать одно и то же число
От 1 до [0]
От 2 до [1]
От 3 до [2]
От 4 до [3]

не переключать

если же после 1
если отличается то 0

1=0
0=1

если [1] совпадает, не сравнивайте (FALSE)
если [0] совпадает, не сравнивайте
если [2] совпадают, не сравнивайте
если [3] совпадают, не сравнивайте

если [1] не совпадает, сравните (TRUE)
если [0] не совпадает, сравните
если [2] не совпадает, сравните
если [3] не совпадают, сравните


если сравнивать с [1], то это дает истинную остановку
если ложь продолжайте
если по сравнению с [0] дает истинную остановку
если ложь продолжайте
если сравнивать с [2], то это дает истинную остановку
если ложь продолжайте
если сравнивать с [3], то это дает истинную остановку
если ложь продолжайте

TRUE= wronPlace+1
4 = макс.

Пожалуйста, помогите мне изменить этот фрагмент кода в план ниже! Я уже некоторое время борюсь с этим

Что я уже пробовал:

Перед планом он Рид, используя цикл while, если statemts и все, что привело к неудаче. Мне удалось придумать базовый план, используя свои знания о Булевом поле и оценивая ситуацию с помощью 1 и 0 (True и False). Я предсказываю, что ключевое слово continue должно присутствовать

Richard Deeming

Репост
Вы уже опубликовали это домашнее задание:
https://www.codeproject.com/Questions/1229655/How-may-I-shorten-this-code-Python[^]

Если вы хотите обновить свой вопрос, чтобы добавить недостающую информацию, Нажмите зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос. НЕ опубликуйте обновление как новый вопрос.

Member 13672432

Не домашнее задание. Я пытаюсь научиться программировать, а ты мне не помогаешь.

1 Ответов

Рейтинг:
1

Patrice T

Ваша первая проблема заключается в том, что

if guess1== code[1] or code[2] or code[3]:

это не питон.
поправка есть
if guess1== code[1] or  guess1== code[2] or  guess1== code[3]:


Ваша проблема заключается в том, что элемент кода может совпадать с предположением более одного раза. Вы должны разработать алгоритм, который предотвратит это.


Member 13672432

Я разработал стратегию, чтобы сделать это, но это занимает слишком много "если" и elifs, чтобы отслеживать, который заставляет его быть запутанным