Неправильные операторы if-else - PullRequest
0 голосов
/ 02 сентября 2018

Я пытался написать функцию, которая будет запрашивать число от 1 до 11, будет случайным образом выбирать число и сравнивать их между собой. Я не могу понять, почему, независимо от того, какой номер я наберу (равно или меньше или больше), он всегда будет печатать сообщение «Ваш номер меньше».

def loto():
    _number = int(input("Enter any number between 1-10: "))
    import random
    for x in range(1):
        print ("Python chose: " + str(random.randint(1,11)))
    if ("_number" == "random"):
        print ("You Won! :)")
    if ("_number" < "random"):
        print ("Your number is less")
    if ("_number" > "random"):
        print ("Your number is more")
    else:
        print ("You Lost :(")

loto()

Я использую Python 3.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы сравнивали строки, а не переменные, вам нужно удалить кавычки, и вы не сохранили случайное число в переменной. Цикл for делает только одно повторение, вы можете удалить его. Обновите свою треску следующим образом:

import random
def loto():
    _number = int(input("Enter any number between 1-10: "))

    rand_number = random.randint(1,11) # can't had the same name as random
    if (_number == rand_number):
        print ("You Won! :)")
    elif (_number < rand_number):
        print ("Your number is less")
    elif (_number > rand_number):
        print ("Your number is more")
    else:
        print ("You Lost :(")

loto()
0 голосов
/ 02 сентября 2018

Ваша первая проблема - вы сравниваете строки "_number" и "random". ASCIIbetically (или, скорее, Unicoderifically), "_number" < "random", потому что символ _ равен # 95, а символ r равен # 114.

Если вы хотите сравнить две переменные, вы просто ссылаетесь на переменные, а не на строки, которые совпадают с именами этих переменных.

Ваша вторая проблема в том, что random это не ваше случайное число, это модуль, который вы использовали для создания этого числа. И, если быть более серьезным, вы нигде не храните это число - вы просто конвертируете его в строку, чтобы распечатать, а затем выбрасываете.

Ваша третья проблема заключается в том, что вам нужно изменить эти if s на elif s. В противном случае сообщение You Lost печатается всякий раз, когда _number > random не соответствует действительности, а не только тогда, когда все три сравнения не соответствуют действительности.

Собираем все вместе:

choice = random.randint(1,11)
for x in range(1):
    print ("Python chose: " + str(choice))
if (_number == choice):
    print ("You Won! :)")
elif (_number < choice):
    print ("Your number is less")
elif (_number > choice):
    print ("Your number is more")
else:
    print ("You Lost :(")

Конечно, нет способа проиграть вашу игру - одно из трех условий всегда будет верным. (Если вы использовали комплексные числа или числа с плавающей запятой, включая NaN, вы могли бы ввести число, которое ни в коем случае не было сопоставимо с выбранным, но это не так.)


Пока мы на этом:

  • Нет смысла называть вашу переменную _number вместо number.
  • Этот цикл for x in range(1): не делает ничего полезного - он повторяется ровно один раз, устанавливая для x значение 0, которое вы никогда не используете.
  • Вам не нужны скобки вокруг ваших условий.
  • Вы не должны импортировать модули в середине такой функции, за исключением особых случаев, когда вам нужны необычные вещи, такие как отложенная загрузка.
  • Вы должны следовать стилю PEP 8 или, по крайней мере, выбрать последовательный стиль для подражания.
  • Проще просто передать несколько аргументов в print или использовать форматирование строк, чем вручную преобразовывать вещи в строки и объединять их.

Итак:

import random

def loto():
    number = int(input("Enter any number between 1-10: "))
    choice = random.randint(1, 11)
    print("Python chose:", choice)
    if number == choice:
        print("You Won! :)")
    elif number < choice:
        print("Your number is less")
    elif number > choice:
        print("Your number is more")
    else:
        print("You Lost :(")

loto()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...