Есть ли лучшие способы записи операторов if в python? - PullRequest
1 голос
/ 02 апреля 2020

Итак, я сейчас пишу Python. Я решил сделать приложение, чтобы помочь моей сестре с таблицами умножения. Я пишу код, который будет случайным образом выбирать из моих 10 списков различных вопросов (я знаю, что есть лучшие способы написать его, но он дал мне возможности, которые я хотел использовать с SQL). списки располагаются в виде таблицы (Tone, Ttwo, Tthree и т. д. c.) внутри Tone будет ['1 * 1', '1 * 2', ...] тогда, как видно из оператора if, который он вызывает, вызывая список и проблема со случайно сгенерированными числами.

def pick_question():
    Table = random.randint(0,9)
    Col = random.randint(0,9)
    if Table == 0:
        if Col == 0:
            return Tone[0]
        elif Col == 1:
            return Tone[1]
        elif Col == 2:
            return Tone[2]
        elif Col == 3:
            return Tone[3]
        elif Col == 4:
            return Tone[4]
        elif Col == 5:
            return Tone[5]
        elif Col == 6:
            return Tone[6]
        elif Col == 7:
            return Tone[7]
        elif Col == 8:
            return Tone[8]
        elif Col == 9:
            return Tone[9]
    elif Table == 1:
        if Col == 0:
            return Ttwo[0]
        elif Col == 1:
            return Ttwo[1]
        elif Col == 2:
            return Ttwo[2]
        elif Col == 3:
            return Ttwo[3]
        elif Col == 4:
            return Ttwo[4]
        elif Col == 5:
            return Ttwo[5]
        elif Col == 6:
            return Ttwo[6]
        elif Col == 7:
            return Ttwo[7]
        elif Col == 8:
            return Ttwo[8]
        elif Col == 9:
            return Ttwo[9]

очевидно, что это будет продолжаться, но это было уже довольно долго. Интересно, можно ли было сделать так, чтобы он не был таким повторяющимся и выглядел лучше?

Ответы [ 4 ]

5 голосов
/ 02 апреля 2020
def pick_question():
    Table = random.randint(0,9)
    Col = random.randint(0,9)
    return [Tone,Ttwo][Table][Col]

Я думаю, вы пытаетесь написать:

import random

Tone = [f"1*{i}" for i in range(1,10)]
Ttwo = [f"2*{i}" for i in range(1,10)]
Tthree = [f"3*{i}" for i in range(1,10)]
Tfour = [f"4*{i}" for i in range(1,10)]
Tfive = [f"5*{i}" for i in range(1,10)]
Tsix = [f"6*{i}" for i in range(1,10)]
Tseven = [f"7*{i}" for i in range(1,10)]
Teight = [f"8*{i}" for i in range(1,10)]
Tnine = [f"9*{i}" for i in range(1,10)]
Questions = [
    Tone,
    Ttwo,
    Tthree,
    Tfour,
    Tfive,
    Tsix,
    Tseven,
    Teight,
    Tnine,
]

def pick_question():
    Table = random.randint(0,8)
    Col = random.randint(0,8)
    return Questions[Table][Col]

print(pick_question())

, но я думаю, вы пытаетесь сделать следующее:

import random
A=random.randint(1,9)
B=random.randint(1,9)
print(f"{A}*{B}=?")
C=input()
try:
    assert A*B==int(C)
    print("You are RIGHT!")
except:
    print(f"Your are WRONG, right answer is: {A*B}")

Удачи с python! это удивительный язык! :)

1 голос
/ 02 апреля 2020

Просто используйте одномерный список:

def pick_question():
Table = random.randint(0,9)
Col = random.randint(0,9)
if Table == 0:
    return Tone[Col]
elif Table == 1:
    return Ttwo[Col]

Это поможет. Или, еще лучше, двумерный список:

def pick_question():
Table = random.randint(0,9)
Col = random.randint(0,9)
List = [Tone, Ttwo]
return List[Table][Col]
0 голосов
/ 02 апреля 2020

Мне очень нравится это решение со словарями и методом get:

route = input()
branch = {'y': code1, 'n': code2}.get(route)

Это сокращает ваш код и будет легче читать.

0 голосов
/ 02 апреля 2020

Вместо того, чтобы писать внутренние структуры if, почему бы не просто

return Tone[Col]

? Фактически, вы можете создать список с помощью Tone, Ttwo, et c. внутри, а затем напишите

return outer_list[Table][Col]
def pick_question(list_with_tone_ttwo):
    table = random.randint(0,9)
    col = random.randint(0,9)
    return list_with_tone_ttwo[table][col]

РЕДАКТИРОВАТЬ: добавлена ​​полная функция

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