Упростить и усовершенствовать код игрушки "угадай число"
Составил небольшой код игрушки "угадай число" Можете подсказать, как упростить код, и что можно добавить
import math
import os
from random import randint
import sys
l =1
checkminran = False
checkmaxran = False
x = ["0","1","2","3","4","5","6","7","8","9"]
print("Давай сыграем с тобой в игру угадай число, для начала выбери диапазон случайного числа")
#Проверка диап случ числа:
while l == 1:
while checkminran == False:
try:
minran =int((input("минимальное число:")))
checkminran = True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
while checkmaxran == False:
try:
maxran =int((input("максимальное число:")))
checkmaxran = True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
if minran > maxran:
ran = randint(maxran,minran)
matt = int((minran-maxran+1)/2)
veb1=0
l = 0
elif maxran > minran:
ran = randint(minran,maxran)
matt =int((maxran-minran+1)/2)
veb1=1
l=0
else:
print("Это безпройграшный вариант, так не честно")
checkminran=False
checkmaxran=False
if matt > 1:
print ("теперь укажи желаемое кол-во попыток(кол-во попыток должно быть меньше или равно "+str(matt)+")")
print('Если не знаешь, какое хочешь кол-во попыток, можешь довериться везению и ввести "0"')
i = False
#выбор кол-во попыток:
while i == False:
try:
att = int(input())
if att == 0:
att=randint(1,matt)
i=True
elif att > matt:
print("Слишком много попыток, это не честно, возьмите меньше попыток")
else:
i=True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
else:
att = 1
if att == 1:
x = "ка"
elif att == 2 or att == 3 or att == 4:
x = "ки"
else:
x = "ок"
print ("У тебя есть "+str(att)+" попыт"+x+", чтобы угадать заданное случайное число то "+str(minran)+" до "+str(maxran)+"")
checkyourint = False
while checkyourint == False:
try:
yourint = int (input())
checkyourint = True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
checkyourint = False
#Сама игра:
while checkyourint == False:
while att > 0:
checkyourint = False
if yourint == ran:
print ("ты выиграл")
att = att-att
exit = int(input('Введите "1", если хотите сыграть еще раз, если нет: введите что угодно:'))
if exit == 1:
os.execv(sys.executable, ['python'] + sys.argv)
else:
break
elif yourint < ran:
att = att-1
if att == 1:
x = "ка"
elif att == 2 or att == 3 or att == 4:
x = "ки"
else:
x = "ок"
print ("неверно, твое число меньше загадонного, у тебя осталось "+str(att)+" попыт"+x)
if att ==0:
print ("ты проиграл, число было: "+str(ran))
att = att-att
exit = int(input('Введите "1", если хотите сыграть еще раз, если нет: введите что угодно:'))
if exit == 1:
os.execv(sys.executable, ['python'] + sys.argv)
else:
break
checkyourint = False
while checkyourint == False:
try:
yourint = int (input())
checkyourint = True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
elif yourint > ran:
att = att-1
if att == 1:
x = "ка"
elif att == 2 or att == 3 or att == 4:
x = "ки"
else:
x = "ок"
print ("неверно, твое число больше загадонного, у тебя осталось "+str(att)+" попыт"+x)
if att ==0:
print ("ты проиграл, было число: "+str(ran))
att = att-att
exit = int(input('Введите "1", если хотите сыграть еще раз, если нет: введите что угодно:'))
if exit == 1:
os.execv(sys.executable, ['python'] + sys.argv)
else:
break
checkyourint = False
while checkyourint == False:
try:
yourint = int (input())
checkyourint = True
except ValueError:
print('Это не является целым чесло, попробуй еще ')
Ответы (3 шт):
Автор решения: Виктор
→ Ссылка
Начните с изучения возможностей python. Функции, циклы, выход из циклов....
Полезно почитать про f-строки для формирования строк
Вот пример для изучения (на базе Вашего кода):
def getInt(str = ''): # Функция чтения int из stdin
while True:
try:
return int(input(str)) # Возвращаем int
except ValueError:
print('Это не является целым числом, попробуй еще')
minran = getInt("минимальное число:")
maxran = getInt("максимальное число:")
В аналогичном ключе поменяйте Ваши запросы ввода целых чисел и код будет несколько легче понимать и не будет повторов одного и тогоже кода.
Ну и это зачем? os.execv(sys.executable, ['python'] + sys.argv)
У Вас же циклы для этого есть, чтобы начать игру с самого начала.
Автор решения: n1tr0xs
→ Ссылка
- Используйте
f-строки. - Используйте функции.
- Для склонений используйте словарь (я назвал его
declinations). - Не меняйте "ты" на "вы" в течение общения с пользователем. Придерживайтесь одного выбранного варианта.
Вот как-то так:
from random import randint
declinations = {
0: 'попыток',
1: 'попытка',
2: 'попытки',
3: 'попытки',
# дальше сами
5: ...,
6: ...,
7: ...,
8: ...,
9: ...,
# а дальше уже заполнять не нужно
}
def get_int(out='', err='Это не целое число. Попробуйте еще раз.'):
while True:
try:
return int(input(out))
except ValueError:
print(err)
def get_range_min_max():
while True:
min_num = get_int(out='Минимальное число:')
max_num = get_int(out='Максимальное число:')
if min_num == max_num:
print('Так не честно!')
else:
return sorted((min_num, max_num))
def get_attempts(min_num, max_num):
diff = (max_num-min_num+1)//2
if diff <= 1:
return 1
print(f'Укажите желаемое кол-во попыток (кол-во попыток должно быть меньше или равно {matt})')
print('Если не знаете, какое хотите кол-во попыток, можете довериться везению и ввести "0"')
while True:
attempts = get_int('Введите кол-во попыток:')
if attempts > diff:
print('Слишком много попыток, возьмите меньше попыток.')
else:
return attempts
def guess_game():
while attempts:
attempts -= 1
declination = declination.get(attempts%10)
answer = get_int('Ваша попытка:')!
if answer==num_to_guess:
print('Вы победили!')
break
elif answer < num_to_guess:
print(f'Ваше число меньше загаданного. У вас осталось {attempts} {declination}.')
else:
print(f'Ваше число больше загаданного. У вас осталось {attempts} {declination}.')
else:
print('Попытки кончились.')
print(f'Я загадывал число {num_to_guess}.')
while True: # main game cycle
# getting minimum and maximum of the range
min_num, max_num = get_range_min_max()
# randomising number to guess
num_to_guess = randint(min_num, max_num)
# selecting the number of attempts
attempts = get_attempts(min_num, max_num)
declination = declination.get(attempts%10)
print(f'У вас есть {attempts} {declination}, чтобы угадать число от {min_num} по {max_num}.')
# guessing cycle
guess_game()
# do user want to play again ?
if input('Введите 1, если хотите сыграть еще раз. Иначе нажмите Enter.') != '1':
break
Автор решения: Alexander Dobromirski
→ Ссылка
Максимально простой вариант.
from random import randint
i=randint(1,10)
print ("Случайное число от 1 до 10 сгенерировано, попробуй угадать!")
o=int(input("Введите предполагаемое число: "))
if i == o:
print ("Вы угадали, это число: " + str(i))
else:
print ("Вы не угадали, это число: " + str(i))