2016-10-11 6 views
4

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

Если я ввожу любое значение менее 24, оно печатает заявление «Вы старое ...». Если я введу какое-либо значение, превышающее 24 (ТОЛЬКО до 99), он печатает инструкцию «вы старая».

Проблема в том, что если вы вводите значение 100 или больше, оно печатает «Вы станете старше, чем вы это знаете». заявление.

print ('What is your name?') 
myName = input() 
print ('Hello, ' + myName) 
print ('How old are you?, ' + myName) 
myAge = input() 
if myAge > ('24'): 
    print('You are old, ' + myName) 
else: 
    print('You will be old before you know it.') 
+3

измените его на 'int (myAge)> 24:' и он должен работать. – Keiwan

+0

"* если вы вводите значение 100 или больше *" - действительно? Что насчет 263? –

+0

Чтобы развернуть комментарий Keiwan - '' 24'' - это строка, а не число, поэтому, когда вы делаете сравнения с ней, что-то вроде '100 '' _ _ _ before_ '24'', потому что '' 1'' приходит раньше ' '2''. Это называется [_lexicographic ordering_] (https://en.wikipedia.org/wiki/Lexicographic_order). – birryree

ответ

5

Вы тестируете значение строки myAge против другого значения строки '24', в отличие от целочисленных значений.

if myAge > ('24'): 
    print('You are old, ' + myName) 

Должно быть

if int(myAge) > 24: 
    print('You are old, {}'.format(myName)) 

В Python, вы можете больше чем/меньше, чем против строк, но он не работает так, как вы могли бы подумать. Так что если вы хотите, чтобы проверить значение целочисленного представления строки используйте int(the_string)

>>> "2" > "1" 
True 
>>> "02" > "1" 
False 
>>> int("02") > int("1") 
True 

Вы можете также заметил, что я изменил print('You are old, ' + myName) к print('You are old, {}'.format(myName)) - Вы должны привыкнуть к этому стилю строка форматирования, так как против выполнения конкатенации строк с помощью +. Вы можете узнать больше об этом в the docs. Но это действительно не имеет ничего общего с вашей основной проблемой.

+0

Что такое {} '. Format (myName)), иначе, чем у меня? Мне действительно любопытно, что делают {} и .format. – Raspbian

+1

Итак, вы можете придумать '{}' в качестве заполнителя в строке для переменной, которая позже предоставляется '.format (variable)' Например, '« Привет, мое имя {}, я {} лет ".format (myName, myAge)' будет помещать эти переменные соответственно в эту строку. '.format' также сделает преобразование типов для вас. Например, у вас возникнет ошибка, если вы попытаетесь сделать «Я есть» + 24 + «лет», потому что нельзя добавлять типы 'int' и' str'. Но «Я {} лет» .format (24) 'работает, потому что' format' знает, чтобы преобразовать тип. Это также чище. Помогает ли вам это понять немного лучше? – sytech

+0

Много! Спасибо, скопировав это в справочник по Python, который я создаю для себя как обманный лист, пока я учусь. В настоящее время я работаю над интро и учебником под названием «Автоматизация скучного материала» и просто получил «Изучение Python на малиновой пи». Я создаю свой собственный реф. руководство по ключевым командам и примерам использования и т. д. Я действительно начинаю с нуля, но BASIC снова в 80-х. – Raspbian

1

Строка '100' действительно меньше, чем строка '24', потому что это '1' «по алфавиту» меньше, чем '2'. Вам нужно сравнить номера.

my_age = int(input()) 
if my_age > 24: 
+0

Я заметил, как вы использовали подчеркивание между my_age, а не используя 'myAge', я видел, как это делается в обоих направлениях, является ли «myAge» не нормой? или приемлемо? – Raspbian

+0

PEP8 (руководство по стилю de facto для Python) рекомендует такой «случай змейки» для идентификаторов. Случай Camel зарезервирован для пользовательских имен классов, и даже тогда он должен начинаться с заглавной буквы. – chepner

1
print ('What is your name?') 
myName = input() 
print ('Hello, ' + myName) 
print ('How old are you?, ' + myName) 
myAge = input() 
if int(myAge) > 24: 
    print('You are old, ' + myName) 
else: 
    print('You will be old before you know it.') 

Немного о вашем коде. Вы должны преобразовать вход от myAge в целое число (int) (номер), а затем сравнить это число с номером 24;

Кроме того, вы обычно не добавляете строки вместе, как считается не-pythonic, и это медленно. Попробуйте что-то вроде print ('Hello, %s' % myName) вместо print ('Hello, ' + myName).

Python Strings Tutorial

0

Использование int(myAge). Я всегда использую raw_input, а также вам не нужно печатать свои вопросы. Вместо этого включите этот вопрос в свои исходные файлы:

myName = raw_input("Whats your name?") 
print ('Hello, ' + myName) 
myAge = raw_input('How old are you?, ' + myName) 
if int(myAge) > ('24'): 
    print('You are old, ' + myName) 
else: 
    print('You will be old before you know it.') 
Смежные вопросы