Печатать из-за экрана цепь, зависимую от случайной стоимости

Он пробовал делать код, который печатал из-за экрана "супружеское будущее". Я использовал функцию random.randint, чтобы распределять случайную стоимость между 1 и 20 в r, y в зависимости от стоимости печать из-за экрана показала бы текст, соответствующий вышеупомянутой стоимости. Эта программа была бы должна бросать из-за экрана "Ты умираешь одиноким" если случайной стоимости r 1 или 2, также он был бы должен печатать "Возможно, когда ты выйдешь из бега" если случайной стоимости r 5 или 6, и я схватил с каждой случайной стоимостью r в ранге 1 20.

Код не помечает мне ошибку. Используя print после того, как ему была распределена стоимость в r я смог подтверждать, что да ему распределена случайная стоимость, но печать из-за экрана всегда дает мне "Ты Умираешь одиноким"... Я надеюсь, что это код и не судьба.


import random

def suerte(respuesta):

    if respuesta == 1 or 2:
        return print("Mueres solo")

    elif respuesta == 3 or 4:
        return print("Ella existe, pero tiene novio")

    elif respuesta == 5 or 6:
        return print("Tal vez, cuando salgas de carrera")

    elif respuesta == 7 or 8:
        return print("Ya la conoces, pero no te has animado")

    elif respuesta == 9 or 10:
        return print("Ella si te quiere, pero no le gusta tu forma de ser")

    elif respuesta == 11 or 12:
        return print("Ella está enfrente de tí")

    elif respuesta == 13 or 14:
        return print("Está fuera de tú nivel")

    elif respuesta == 15 or 16:
        return print("Olvidalo")

    elif respuesta == 17 or 18:
        print("Ya casi se te hace")

    elif respuesta == 19 or 20:
        return print("Se te va a aventar hoy")


r = int(random.randint(1, 20))
print("Tu destino dice que... ")
print (r)

f = suerte(r)

print(f)

-2
задан 01.10.2019, 00:25
2 ответа

Проблема - та comparaciГіn:

if respuesta == 1 or 2:

, что deberГ, - чтобы быть:

if respuesta == 1 or respuesta == 2:

и asГ - со всеми они demГЎs.

ВїPor quГ© не давал ошибку тогда?

, Потому что, что tГє письменный habГ-эксперт - синтаксис vГЎlida, это не ошибка, sГіlo, что не делает того, что ты ждешь. Для python он как будто ты поместил:

if (respuesta == 1) or 2:

, что evalГєa следующей формы. Представь, что respuesta стоит 8. В этом случае то, что estГЎ между parГ©ntesis serГ - в фальшивый, и следовательно для python она expresiГіn он равняется в:

if False or 2:

и это, несмотря на то, что она сможет казаться ошибкой, это не, так как Пайтон допускает prГЎcticamente , любой тип такой информации как часть одной expresiГіn booleana. Общее правило, - если информация - ноль или vacГ - или (в случае цепи, готовая, и т.д.), равняется False. Если он отличный от нуля (или он содержит что-то в случае цепи, он заносит в список, и т.д.) равняйся True. В твоем случае, следовательно, 2 равняйся True. Следовательно она expresiГіn False or True верный, и входит из-за первой condiciГіn.

И это ocurrirГЎ независимо от стоимости respuesta.

Альтернатив

Другой способ смотреть, берет ли переменная стоимость или другой, который особенно компактный, если ты хочешь сравнить с mГЎs двух типов стоимости, - следующий:

if respuesta in (1,2):

, Так как в этом случае мы проверяем, estГЎ в tupla (1,2), или же, если это 1 Гі, 2 ли стоимости respuesta.

С другой стороны cГіdigo тебя funciГіn достаточно повторный. Это обычно является одним sГ-ntoma, которого podrГ, - чтобы делаться с циклом. Если tuviГ©ramos структура данных, в которой, для каждой возможной стоимости respuesta содержалась соответствующая фраза, bastarГ, - чтобы искать в ней nГєmero, чтобы получать цепь.

Словарь - тип, приспособленный для этого. Ключи могут быть tuplas возможных nГєmeros и стоимостью соответствующие фразы. Повторяя из-за равного ключа - стоимости мы получаем tuplas (и мы можем смотреть, если respuesta estГЎ в них) и в этом случае печатать соответствующую стоимость. AsГ-:

def suerte(respuesta):
    respuestas = {
        (1,2): "Mueres solo",
        (3,4): "Ella existe, pero tiene novio",
        (5,6): "Tal vez, cuando salgas de carrera",
        (7,8): "Ya la conoces, pero no te has animado",
        (9,10):"Ella si te quiere, pero no le gusta tu forma de ser",
        (11,12): "Ella está enfrente de tí",
        (13,14): "Está fuera de tú nivel",
        (15,16): "Olvidalo",
        (17,18): "Ya casi se te hace",
        (19,20): "Se te va a aventar hoy"
    }
    for caso, frase in respuestas.items():
        if respuesta in caso:
            return frase

Наблюдает, что cГіmo мы конвертировали ты cГіdigo в данных. Данные - словарь respuestas. cГіdigo - сейчас простой цикл, который ищет случай, чтобы возвращать подходящую фразу.

Замечает В тебе funciГіn tenГ-эксперт один return print("blabla"). Если, что querГ-эксперт состоял в том, чтобы возвращать фразу, он превышает print(), так как в этом случае estГЎs возвращая стоимость, возвращенную print(), которой None. Ты не нуждаешься в том, чтобы напечатать фразу с нее funciГіn, так как уже ты это делаешь с главной программы с print(f) (хотя в твоем случае Г©ste imprimirГ - в None а следовательно я только что объяснил)

4
ответ дан 01.12.2019, 16:05

BГЎsicamente моя ошибка была в or , только modifiquГ© if от

  if respuesta == 17 or 18:

до

  if respuesta == 17 or respuesta == 18:
0
ответ дан 01.12.2019, 16:05
  • 1
    Действительно это была ошибка. Я написал немного пространный ответ объясняя из-за qué он вводил тебя всегда из-за первой opció n, y dá ndote другие альтернативы má s " avanzadas" чтобы делать funció n. – abulafia 01.10.2019, 00:58