Ввод данных с клавиатуры. Урок 8

Основы программирования на Python

Компьютерные программы обрабатывают данные, производя над ними операции, которые задал программист, и которые были обусловлены поставленными задачами. Данные в программу можно "заложить" в процессе ее разработки. Однако такая программа всегда будет обрабатывать одни и те же данные и возвращать один и тот же результат. Чаще требуется совершенно другое — программа должна обрабатывать разные (относительно, в определенном диапазоне) данные, которые поступают в нее из внешних источников. В качестве последних могут выступать файлы или клавиатура. Когда информация вводится с клавиатуры, а результаты выводятся на экран монитора, то можно говорить об интерактивном режиме работы программы. Она обменивается информацией с внешней для нее средой: может выводить и получать данные в процессе выполнения, и не является замкнутой сама на себе. С выводом данных мы уже отчасти знакомы: выводом на экран (и не только) в языке программирования Python занимается функция print().

Ввод данных с клавиатуры в программу (начиная с версии Python 3.0) осуществляется с помощью функции input(). Когда данная функция выполняется, то поток выполнения программы останавливается в ожидании данных, которые пользователь должен ввести с помощью клавиатуры. После ввода данных и нажатия Enter, функция input() завершает свое выполнение и возвращает результат, который представляет собой строку символов, введенных пользователем.

>>> input()
1234
'1234'
>>> input()
Hello World!
'Hello World!'
>>> 

Когда выполняющаяся программа предлагает пользователю что-либо ввести, то пользователь может не понять, что от него хотят. Надо как-то сообщить, ввод каких данных ожидает программа. С этой целью функция input() может принимать необязательный аргумент-приглашение строкового типа; при выполнении функции сообщение будет появляться на экране и информировать человека о запрашиваемых данных.

>>> input("Введите номер карты: ")
Введите номер карты: 98765
'98765'
>>> input('Input your name: ')
Input your name: Sasha
'Sasha'
>>> 

Из примеров видно, что данные возвращаются в виде строки, даже если было введено число. В более ранних версиях Python были две встроенные функции, позволяющие получать данные с клавиатуры: raw_input(), возвращающая в программу строку и input(), возвращающая число. Начиная с версии Python 3.0, если требуется получить число, то результат выполнения функции input() изменяют с помощью функций int() или float().

>>> input('Введите число: ')
Введите число: 10
'10'
>>> int(input('Введите число: '))
Введите число: 10
10
>>> float(input('Введите число: '))
Введите число: 10
10.0
>>> 

Результат, возвращаемый функцией input(), обычно присваивают переменной для дальнейшего использования в программе.

>>> userName = input('What is your name? ')
What is your name? Masha
>>> exp = input('3*34 = ')
3*34 = 102
>>> exp = int(exp) + 21
>>> userName
'Masha'
>>> exp
123
>>> 

Практическая работа

1. Создайте скрипт (файл data.py), который бы запрашивал у пользователя
- его имя: "What is your name?"
- возраст: "How old are you?"
- место жительства: "Where are you live?"
, а затем выводил три строки
- "This is имя"
- "It is возраст"
- "He live in место_жительства"
, где вместо имя, возраст, место_жительства должны быть соответствующие данные, введенные пользователем.

2. Напишите программу (файл example.py), которая предлагала бы пользователю решить пример 4*100-54. Если пользователь напишет правильный ответ, то получит поздравление от программы, иначе – программа сообщит ему об ошибке. (При решении задачи используйте конструкцию if-else.)

3. Перепишите предыдущую программу так, чтобы пользователю предлагалось решать пример до тех пор, пока он не напишет правильный ответ. (При решении задачи используйте цикл while.)

while 1: count = input()

while 1:
    count = input()
    try:
        count = int(count)
        break
    except ValueError:
        print('Вводите число')

Доброго времени суток. Изучаю по учебнику, до того как узнал о обработке исключений делал бесконечные циклы с двумя условиями для проверки ввода пользователя. Хочу что-то вроде вашего примера адаптировать для проверки вхождения ключа в словаре. Но при этом хочу дать возможность покинуть цикл при вводе определенного ключа(инпута), возможно ли придумать что-нито на подобие кода выше. В голову лезут варианты, но хочу посмотреть на Ваш. Спасибо.

На каком-то шаге надо сделать

На каком-то шаге надо сделать проверку if.

if введенное_значение in словарь:
   break

Как проверить,что в введённой

Как проверить,что в введённой строке( input(count) )
count - является числом (int)
и при этом - не вылазил эррор .
Заранее благодарю!

count = input() try:

count = input()
try:
    count = int(count)
except ValueError:
    print('Вводите число')

С зацикливанием пока не будет введено число:

while 1:
    count = input()
    try:
        count = int(count)
        break
    except ValueError:
        print('Вводите число')

Поясните почему пока 1:

Поясните почему пока 1: итерирует бесконечно, а пока 0: не отрабатывает.
Спасибо.

1 - это True (правда) 0 - это

1 - это True (правда)
0 - это False (ложь)
Тело цикла выполняется только если в его заголовке True.

3 задание. Не могу понять,что

3 задание. Не могу понять,что не так. Как завершить цикл при вводе правильного числа.

i = int(input("4+2= "))
j = 6
while i != int(input("4+2= ")) :
    i = input("4+2= ")
    i = int(input("4+2= "))

i = int(input("4+2= ")) j =

i = int(input("4+2= "))
j = 6
while i != j :
    i = int(input("4+2= "))

А как сделать чтоб программа

А как сделать чтоб программа не заканчивалась при нажитие Enter?

Поместить весь код в еще один

Поместить весь код в еще один цикл, который будет прерываться по другому условию.

Здравствуйте! вот

Здравствуйте!
вот недоделанная программа для урока 5

если вводить цифры, оно работает, а если буквы - ошибка.
не могу придумать, как сделать проверку на ввод цифр, чтобы при вводе букв говорило "ошибка, нужно ввести цифры". Подскажите, пожалуйста!

print('Вы в магазине. Вам надо купить хлеб, молоко и масло')
print('Хлеб стоит 4 грн., молоко - 10, а масло 20 грн.')
cash = int(input('Сколько у вас денег?'))
 
bread = 4
milk = 10
butter = 20
a = bread + milk + butter
 
if a < cash :
    print('стоимость товаров ' + str(a) + ' грн.')
    b = cash - a
    print('Отлично! Ваша сдача ' + str(b) + ' грн.')
elif a == cash :
    print('Спасибо, что без сдачи!')
else :
    print('Сумма недостаточна')

Во-первых сама функция input

Во-первых сама функция input в версии 2 питона принимает только числовые форматы. С этой точки зрения лучше использовать тогда отдельную функцию raw_input, которая принимает строки и не только.

Во-вторых для проверки введенной строки на предмет явления числом есть метод isdigit().

Все сказанное реализовано в коде ниже. Проверил, работает.

print('Вы в магазине. Вам надо купить хлеб, молоко и масло')
print('Хлеб стоит 4 грн., молоко - 10, а масло 20 грн.')
cash = raw_input('Сколько у вас денег?\n')
 
if cash.isdigit():
    cash = int(cash)
    bread = 4
    milk = 10
    butter = 20
    a = bread + milk + butter
    if a < cash:
        print('стоимость товаров ' + str(a) + ' грн.')
        b = cash - a
        print('Отлично! Ваша сдача ' + str(b) + ' грн.')
    elif a == cash :
        print('Спасибо, что без сдачи!')
 
    else :
        print('Сумма недостаточна')
else:
    print('Значение должно быть числом')

3 задание print ("Предлагаем

3 задание

print ("Предлагаем вам решить пример:")
a = input("4*100-54 = ")
while a != "346" :
    a = input("Ошибка! повторите попытку: ")
print ("Привильно! Поздравляем)))")   

Здравствуйте, помогите

Здравствуйте,
помогите пожалуйста!
При последовательности типа
x=float(raw_input(‘…’))
y=float(raw_input(‘…’))

Питон выводит только запрос первого raw_input и не переходит затем ко второму. В чем причина? Я бьюсь и никак не могу понять. Уже перепробовал все начиная от версии 2,5 до 3.3 на разных машинах и разные коды с такой же последовательностью функций пользовательского ввода c конвертацией в float и без нее... Все коды прикращают выполняться после выполнения первой строки...

У вас странные символы

У вас странные символы кавычек и троеточие в них. Из за этого ошибка (Non-ASCII character '\xe2' in file ...). Напишите их вручную.

Как проверить тип введенных

Как проверить тип введенных данных?
Нашел информацию, что тип данных можно проверить с помощью команды type. Но программа не работает

name = input ("Введите что-нибудь:  ")
if type (name) == int:
   print ("Вы ввели целое число")
elif type (name) == float:
   print ("Вы ввели дробное число")
elif type (name) == str:
   print ("Вы ввели текст")
else:
   print ("Ошибка")

Как можно просто и быстро проверить тип введенных данных?
Извиняюсь сразу за форматирование кода в комментарии. Просто не стал разбираться, как сделать отступы и подсветку кода

Дело в том, что функция

Дело в том, что функция input() всегда возвращает строку. Т.е. если даже вводится число 5, оно присваивается переменной name как строка "5".

Если все же надо проверить, что вводит пользователь, то можно воспользоваться конструкцией обработки исключения try-except. Например:

name = input ("Введите что-нибудь:  ")
try:
	name = int(name)
	print ("Вы ввели целое число")
except ValueError:
	try:
		name = float(name)
		print ("Вы ввели дробное число")
	except ValueError:
		print ("Вы ввели не число")

Программа пытается (try) преобразовать значение name в целое число. Если это возможно, то исключения (ошибки) не возникает. В таком случае выполняется следующая строка с print, а ветка except вообще не выполняется.

Если то, что ввел пользователь, преобразовать к целому нельзя, то возникает ошибка ValueError, и тело try прекращает выполняться. Ошибку начинает обрабатывать ветка except. Там проверяем не возникнет ли исключения при попытке преобразования к вещественному числу.

___________
на этом сайте, чтобы код был с подсветкой его надо заключить в html-контейнер code:
<code>
...
...
...
</code>

Спасибо за пояснение. Ваш код

Спасибо за пояснение. Ваш код работает так, как я хотел. Но мне осталось непонятным следующее: почему если ввести дробное число, то строка name = int(name) не преобразует его в целое число. ведь функция int() должна преобразовать дробное в целое.
Я полагал, что независимо от того, введет ли пользователь 5 или 5.2, на третьей строке кода мы должны получить 5.
В принципе, я догадываюсь, что поскольку функция input() всегда возвращает строку, то 5.2 понимается как строка и поэтому 5.2 не может быть преобразовано в целое число (банально из-за наличия точки между цифрами). Я прав?

Да, правы. Функция int()

Да, правы. Функция int() может преобразовать строку в целое, если в кавычках целое число. Если в кавычках вещественное число, то нет.
Возможно эти ограничения для int() введены как раз из-за ситуаций, когда возможна неоднозначная трактовка входных данных.

input("Ведите номер карты:

input("Ведите номер карты: ")
Ведите номер карты: 341431
'341431'
input('Input your name: ')
Input your name: SSS
'SSS'
Выдаёт ошибку.Что тут не так ?

Вот так не работает answer =

Вот так не работает

answer = int(answer)
while answer != 4*100-54:

А так работает

answer = int(answer)
while answer != 346:

Мой вариант. # -*- coding:

Мой вариант.

# -*- coding: cp1251 -*-
 
print "Задание 1"
print
print "This is " + raw_input("What is your name? ")
print "It is " + raw_input("How old are you? ")
print "He live in " + raw_input("Where are you live? ")
print
print "Задание 2"
print
if raw_input('Результат выражения "4*100 - 54" = ') == str(4*100 - 54):
    print "Поздравляю, это правильный ответ"
else:
    print "Ответ неправильный"
print
print "Задание 3"
print
while raw_input('Результат выражения "4*100 - 54" = ') != str(4*100 - 54):
	print "Неправильно. Попробуйте еще..."
print "Правильно"

Добрый день! Скажите, а можно

Добрый день! Скажите, а можно ли использовать конкатинацию тут? Выдает ошибку в данном фрагменте кода, но хотелось бы узнать, можно ли такое осуществить?

answer=int(("Hi, "+userName+"! How much 4*100-54? "))

Функция int() преобразует

Функция int() преобразует аргумент в целое число.
Возможно вы имели введу функцию input().

Добрый день! Подскажите

Добрый день!
Подскажите пожалуйста, в python 2.7.3 при использовании input() или raw_input() при выполнении программы он требует сначала ввести значение, а потом выводит подсказку и все остальное.
Например, на команду input("Vvedite chislo: ")

Придется сначала ввести число, а потом только выведется Vvedite chislo:
В чем здесь ошибка?

# -*- coding: utf-8

# -*- coding: utf-8 -*-
name=raw_input('Ваше имя: ')
age=input('Ваш возраст: ')
place=raw_input('Город: ')
print '\nДорогой ', name, 'из ', place,', решите этот пример: 5*100-',age, '\n и введите ответ!\n'
answerd='fig'
while answerd != (5*100-age):
	answerd=input()
	if answerd == 5*100-age:
		print 'Да вы отлично считаете!'
		break
	else:
		print 'Неверно, попробуйте ещё раз!'
 

Домашнее задание

Задание 1.

userName = raw_input('What is your name? ')
userAge = raw_input('How old are you? ')
userAddress = raw_input('Where are you live? ')
 
print('This is ' + userName)
print('It is ' + userAge)
print('He lives in ' + userAddress)

Задание 2.

userName = raw_input('What is your name? ')
task = int(raw_input('Solve this problem 4*100 - 54 = '))
if (task != 346):
    print ('Solution is incorrect! Try again, ' + userName)
else:
    print('Congratulations,' + userName + '! The answer is correct!')

Задание 3.

userName = raw_input('What is your name? ')
task = int(raw_input('Solve this problem 4*100 - 54 = '))
while task != 346:
    print('Solution is incorrect! Try again, ' + userName)
    task = int(raw_input('Solve this problem 4*100 - 54 = '))

Если это урок про ввод данных

Если это урок про ввод данных с клавиатуры, каким образом мы можем создать скрипт? Этого еще не было.

Скрипт, в данном случае, -

Скрипт, в данном случае, - это код программы, сохраненный в файл, а не выполняемый сразу по мере написания интерпретатором.

Решение на питоне ниже 3.0 версии

a = raw_input ('ваше имя : ') 
b = raw_input('ваш возвраст : ')
c = raw_input ('место жительства : ')
 
print "имя : "  + (a)
print "возвраст : " + (b)
print "место жителства : " + (c)

Не получается

Додумался до:

exp1 = input("Решите пример: 4*100-54= ")
if exp1 == 4*100-54:
    print ("Примите наши поздравления!")
else:
    print ("Ниправильна")

Python 3.2

exp1 изменяется на нужное число, но все равно выдает "Ниправильна"
пробовал еще варианты с 1 и 2мя переменными - пока == ответ Ниправильна на любые числа
даже выставлял if exp1 == 346, но... поздравления приходят только, если поставить !=... и так же на любое число

подскажите пожалуйста в чем не прав и как было бы правильно?

Если у вас Python версии 3,

Если у вас Python версии 3, то функция input возвращает строку, и получается, что вы сравниваете строку и число. Они всегда не равны.

Попробуйте так:

exp1 = input("Решите пример: 4*100-54= ")
exp1 = int(exp1) # Преобразование в целое число
...
...

цикл

Не могу понять как правильно выполнить задание № 3 . Вот мой код :

a = int(input("4*100-54 = "))
if a == 346:
    print ("1")
else:
    print ("0")
while a != 346:
    a = int(input("4*100-54 = "))
    if a == 346:
        print ("1")
    else:
        print ("0")

Все работает. Но я думаю, что его можно уменьшить раза в 2.

a = int(input("4*100-54 =

a = int(input("4*100-54 = "))
 
while a != 346:
    a = int(input("4*100-54 = "))
    print ("0")
 
if a == 346: # эта строчка тоже не обязательна
    print ("1") # если уберете предыдущую строчку, у этой уберите отступ

ans = int(input("Сколько

ans = int(input("Сколько будет 100*4-54? >>>"))
while ans != 346:
	ans = int(input("Не правильно, сколько будет 100*4-54? >>>"))
if ans == 346:
	print("Правильно!")

Подскажите, каким образом можно исключить ввод строк например или исключить пустую строку? Заранее благодарен.

возник такой же вопрос! как

возник такой же вопрос!
как недопустить вываливание кода в ошибку если вводится строчное значение?

print "Provide the correct

print "Provide the correct answer for this 4 * 100 - 54"
try:
	while input() != 246:
		print "Not correct"
	print "Correct!"
except:
	print "You should provide integer"
raw_input()

2 задание

не совсем понимаю как сделать так чтобы сначала спрашивала а патом говорила правильно или нет

try: 1/0 print "Можно

try:
    1/0
    print "Можно делить на ноль"
except:
    print "Нельзя делить на ноль!"
 
print "Жизнь продолжается..."

x = int(input("Сколько будет

x = int(input("Сколько будет 4*100-54? "))
while x != 4 * 100 - 54:
    print("Ответ не верный, попробуйте еще раз!")
    x = int(input("Сколько будет 4*100-54? "))
if x == 4 * 100 - 54:
    print("Ответ верный!")

Так пойдет? Сделал, все работает.