Элегантный способ создания и/или проверки нумерованных переменных в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Элегантный способ создания и/или проверки нумерованных переменных в Python

Сообщение Anonymous »

Я старый парень, пытающийся изучить Python, поэтому мой последний опыт программирования был на BASIC — нет, не на Visual Basic. Я понимаю некоторые концепции, связанные с Python, но я нахожусь на стадии начинающего программиста, поэтому я закодировал этот проект, используя логику «грубой силы» - по сути, разбивая строку на отдельные буквы, а затем проверяя каждую букву в классическом стиле. Игра «Угадай слово».
Основная логика заключалась в следующем:
  • Представьте стандартное приветствие.
    Выберите случайное слово из определенного списка — список был сокращен, чтобы
    упростить тестирование.
  • Разбейте строку на отдельные буквы. >
  • Отображать неразгаданные буквы как «_» и сокращать отображение так, чтобы
    если количество символов меньше числа переменных для каждого слова,
    отображалось «».< /li>
    Измените "_", если буква была включена в список предыдущих
    догадок.
  • Объявляем вас победителем, если "_" " исключаются.
  • Объявите вас проигравшим, если ваши догадки иссякнут.
  • Спросите, хотите ли вы переиграть.
Чтобы расширить код для слов длиной более 4 цифр, я бы скопировал и вставил логику для создания v4, вывода 4 и т. д. - как я уже сказал, подход грубой силы.
Чтобы расширить код для слов длиной более 4 цифр, я бы скопировал и вставил логику для создания v4, вывода 4 и т. д. - как я уже сказал, подход грубой силы. p>
Итак, любые комментарии от людей:
  • Советы, как сделать его красивее, или лучший способ добиться того жецель (т.е. мне вообще не нужно разбивать строку на отдельные буквы
    )
  • Любые трюки, чтобы не приходилось перебирать имена всех переменных и
    имейте меньший код, автоматически генерирующий переменные для правильной
    длины случайного слова, которое вы пытаетесь угадать.
Вот мой код:

Код: Выделить всё

import random

words = ['rai', 'com']

turns = 5

def set_random(): # set the random word the user will try to guess
ran = random.choice(words)
main(ran)
def main(ran): # main body, a giant function which avoids using global variables
lives = turns # used to pass in the initial message on how many lives and then count down for wrong guesses
user_guesses = []
print(f'Your word has {len(ran)} letters')
flag = True # used to end the game if the user guesses all of the letters

while lives > 0 and flag == True: # testing both conditions, lives still remain and game not won
test_length = len(ran)

# my logic to break down the random word string into individual letters used for the subsequent testing.   Also,
# fixes display so that if the brute force placeholders for checking is longer than the actual answer, it will
# display a black placeholder
if test_length > 0:
v0 = ran[0]
else:
v0 = ""

if test_length > 1:
v1 = ran[1]
else:
v1 = ""

if test_length > 2:
v2 = ran[2]
else:
v2 = ""

if test_length > 3:
v3 = ran[3]
else:
v3 = ""

# brute for logic - initialize the output with default values which are then tested and changed in the next step
output0 = "_"
output1 = "_"
output2 = "_"
output3 = "_"

# collect user guess, add it to the prior guess list and sort it for display later
guess = input(str("Please guess a letter:  "))
user_guesses.append(guess)
user_guesses.sort()

# the positive condition meaning the guess was included and then to change the display output to reflect guessed
# letters or the "_" or show nothing if the word was shorter than the brute force placeholders
if guess in ran:
print(f'"{guess}" is in the word')
if v0 == "":
output0 = ""
elif v0 in user_guesses:
output0 = v0
else:
pass

if v1 == "":
output1 = ""
elif v1 in user_guesses:
output1 = v1
else:
pass

if v2 == "":
output2 = ""
elif v2 in user_guesses:
output2 = v2
else:
pass

if v3 == "":
output3 = ""
elif v3 in user_guesses:
output0 = v3
else:
pass

print(f'You have guessed {user_guesses}')

else:
lives -= 1
if v0 == "":
output0 = ""
elif v0 in user_guesses:
output0 = v0
else:
pass

if v1 == "":
output1 = ""
elif v1 in user_guesses:
output1 = v1
else:
pass

if v2 == "":
output2 = ""
elif v2 in user_guesses:
output2 = v2
else:
pass

if v3 == "":
output3 = ""
elif v3 in user_guesses:
output0 = v3
else:
pass

print("")
print(f'Sorry, there is no "{guess}" is in the word')
print(f'You have {lives} lives remaining')
print(f'You have guessed {user_guesses}')
print("")

# command to display the user guesses with "_" for the unguessed numbers
print(output0, output1, output2, output3)

# logic to test if the game has been won by guessing all the correct letter - eliminating all "_"
x = output0 + output1 + output2 + output3
if "_" not in x:
print("")
print(f'You have correctly guessed "{ran}"! You have won the game!')
print("")
flag = False
else:
pass

# code to end the game if all the lives are lost
if lives == 0:
print(f'Sorry, you are out of lives.   Your word was {ran}')
print("")
else:
pass

replay_game()

# function to replay the game starting with the random word being re-selected and passed to the main function
def replay_game():
choice = input("Would you like to play again? (Y/N): ")
choice = choice.lower()
if choice == 'y':
print("")
set_random()
else:
print("")
print("Thanks for playing!, good bye")

# standard greeting message - ask for name and if the user wants instructions on how to play
def greeting():
print("Welcome to my game!")
print("")
name_player = input(str("Please input your name: "))
print("")
print(f'Hello {name_player}, let us begin the Word Guessing Game')
instructions = input(str(f'Would you like instructions on how to play? Y/N: '))
if instructions.upper() == "Y":
print("")
print(
f'You will have {turns} lives to guess the right word.  Input letters until you solve the word or you run out of lives.')
print(f'Now, we will start the game!')
print("")
else:
print("")
print(f'Then we will start the game!')
print("")

greeting()
set_random()
Мое решение работает, и его можно расширить, но это подход грубой силы, и я предполагаю, что есть лучший способ его закодировать. Однако в этой функции кодирование работает по прямому назначению.
Чего я не знаю:
  • Я Я нарушаю какие-либо эмпирические правила кодирования? Например, мой исходный
    код использовал глобальные переменные, поэтому я перекодировал его, чтобы исправить это.
  • Стандартно ли делить мой код, как я, или мне следует его сегментировать?
    в большее количество функций, чтобы функции кода можно было использовать повторно? -
    по сути, основная функция огромна.
    Лучший способ автоматического создания переменных и присвоения значений на основе операторов
    if/then. По сути, могу ли я объединить этап
    сокращения отображения для соответствия длине слова, а также изменения
    на предположение, вместо «_» и использования нескольких шагов, как в моем коде? li>
Будем очень благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»