Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 14, 2019 21:53:35

kennig
Зарегистрирован: 2019-01-14
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите советом!

Только начал прикасаться к этому чуду, с программированием вообще еле знаком, поэтому можете судить строго, но помогите разобраться. Есть код:
# -*- coding: utf8 -*-
name = input(“Введите имя: ”)
age = input(“Сколько Вам лет? ”)
if age.isdigit():
age = int(age)
else:
print(“Буквы нельзя!”)
height = input(“Ваш рост? ”)
if height.isdigit():
height = int(height)
else:
print(“Буквы нельзя!”)
weight = input(“Ваш вес? ”)
if weight.isdigit():
weight = int(weight)
else:
print(“Буквы нельзя!”)
eyes = input(“Введите цвет глаз: ”)
teeth = input(“Введите цвет зубов: ”)
hair = input(“Что Вы скажете о своих волосах? ”)

print (u“Это напечатал %s” % name)
print (u“Его рост был вчера %d” % height)
print (u“Его вес %d, он совсем худой” % weight)
print (u“У него также %s глаза, %s зубы и я бы сказал о его волосах, что %s” % (eyes, teeth, hair))
print (u“Его счастливое число: %d” % (height+weight+age))
Все нравится, но охота, чтоб проверка на цифры шла постоянно а не один раз. То есть результат такой:
Сколько Вам лет? к
Буквы нельзя!
и программа выполняется дальше. Я так понимаю нужно засовывать цикл, который бы проверял такую логику: получаем строку от пользователя => отдаем проверке => проверка говорит “Буквы нельзя!”=> снова отдаем на получение.
Как сделать такую проверку? Я пятой точкой чую, что все просто, по сути надо проверять значение age while'ом, который каждый раз, как получит значение будет отдавать его на проверку, пока не получит число. Или же все еще проще и if здесь лишняя сущность?

Отредактировано kennig (Янв. 14, 2019 21:54:53)

Офлайн

#2 Янв. 14, 2019 22:40:48

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите советом!

kennig
по сути надо проверять значение age while'ом, который каждый раз, как получит значение будет отдавать его на проверку, пока не получит число.
Да.
kennig
Или же все еще проще и if здесь лишняя сущность?
Ещё можно использовать не input, а другие функции, со встроенной возможностью проверить введённое значение. Но это не проще.

Офлайн

#3 Янв. 14, 2019 22:54:19

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите советом!

Только надо не копипастить все проверки для каждой новой переменной:

 age = input("Сколько Вам лет? ")
if age.isdigit():
...
height = input("Ваш рост? ")
if height.isdigit():
...
weight = input("Ваш вес? ")
if weight.isdigit():

а засунуть их в отдельную функцию и вызывать её

 def input_int(text):
	while True:
		v = input(text)
		if v ...
	return v
age = input_int("Сколько Вам лет?")
height = input_int("Ваш рост?")
weight = input_int("Ваш вес?")

Офлайн

#4 Янв. 15, 2019 09:52:30

kennig
Зарегистрирован: 2019-01-14
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите советом!

uf4JaiD5 спс, буду пробовать

Офлайн

#5 Янв. 15, 2019 11:51:20

kennig
Зарегистрирован: 2019-01-14
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите советом!

uf4JaiD5
Только надо не копипастить все проверки для каждой новой переменной:
# -*- coding: utf8 -*-
name = input(“Введите имя: ”)
def input_int(text):
while True:
v = input(text)
if v.isdigit():
v = int(v)
else:
print(“Буквы нельзя!”)
return v
age = input_int (“Сколько Вам лет?”)
height = input_int (“Сколько Ваш рост?”)
weight = input_int (“Сколько Ваш вес?”)
eyes = input(“Введите цвет глаз: ”)
teeth = input(“Введите цвет зубов: ”)
hair = input(“Что Вы скажете о своих волосах? ”)

print (u“Это напечатал %s” % name)
print (u“Его рост был вчера %d” % height)
print (u“Его вес %d, он совсем худой” % weight)
print (u“У него также %s глаза, %s зубы и я бы сказал о его волосах, что %s” % (eyes, teeth, hair))
print (u“Его счастливое число: %d” % (height+weight+age))

Запустился, но как только доходит до(“Сколько Вам лет?”) если вводишь цифры, то просит ввести тоже значение, если буквы - переходит на следущее, но фактически он хавает буквенное значение и естесс-но валится в ошибку мол в 18-й строчке буквенное значение

Отредактировано kennig (Янв. 15, 2019 13:46:38)

Офлайн

#6 Янв. 15, 2019 12:56:49

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите советом!

kennig
цикл дальше Сколько Вам лет? не уходит, что бы я не вводил
А где указание “идти дальше”? Его нет.
 def input_int(text):
	while True:
		v = input(text)
		if v.isdigit():
			v = int(v)
			break
		else:
			print("Буквы нельзя!")
	return v
При отправке сообщения код программы лучше оформлять как код:
 [code python]
код программы
[/code]
Тогда он будет оставаться читаемым.

Отредактировано uf4JaiD5 (Янв. 15, 2019 13:02:06)

Офлайн

#7 Янв. 15, 2019 16:42:52

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Помогите советом!

 def input_int(text):
    while True:
        v = input(text)
        if v.isdigit():
            return int(v)
        print('Буквы нельзя!')
        
name = input('Введите имя: ')    
age = input_int("Сколько Вам лет? ")
height = input_int("Ваш рост? ")
weight = input_int("Ваш вес? ")
eyes = input('Введите цвет глаз: ')
teeth = input('Введите цвет зубов: ')
hair = input('Что Вы скажете о своих волосах? ')
print (u'Это напечатал %s' % name)
print (u'Его рост был вчера %d' % height)
print (u'Его вес %d, он совсем худой' % weight)
print (u'У него также %s глаза, %s зубы и я бы сказал о его волосах, что %s' % (eyes, teeth, hair))
print (u'Его счастливое число: %d' % (height+weight+age))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version