Условия цикла Python

avatar
Ububtunoob
8 апреля 2018 в 08:01
175
3
0

У меня небольшой вопрос об условиях цикла Python в цикле while. Я хочу получить информацию от пользователя в виде (оценка/максимальная оценка), например (13/15). Я хочу поместить это в цикл while, который будет постоянно просить пользователя вводить данные в этой форме, пока они не сделают это правильно.

Пока у меня есть это

num1 = 0
while num1 !='?/?':
    num1 = raw_input("Please enter your score in the form socre/max(eg. 30/50)")

Я знаю, как проверить истинность условия с помощью одного числа, например: while x > 18, или если условие является строкой, например: while x != 'Start'. Я не уверен, что использовать в качестве параметров для условия 15/20, где эти два числа будут вводиться именно в таком виде 15/20. Любая помощь будет принята с благодарностью.

Спасибо

Источник
Ububtunoob
8 апреля 2018 в 08:06
0

Как я могу увидеть, где находится этот вопрос. Я воспользовался функцией поиска и не могу найти ничего похожего?

Ububtunoob
8 апреля 2018 в 08:08
0

Я нашел другие условия, такие как отдельные числа, например, пока x> 10 или что-то в этом роде. Но я все равно не могу найти, чтобы проверить, правильно ли отформатировано условие ввода.

timgeb
8 апреля 2018 в 08:09
0

Прочтите синюю ссылку Запрашивать у пользователя ввод, пока он не даст правильный ответ.

Ububtunoob
8 апреля 2018 в 08:14
0

Я прочитал это. В этом случае условие имеет простую форму (x > 18). Таким образом, пользователю нужно только ввести число больше 18. Мой вопрос заключается в том, как можно установить условие для чтения, если пользователь ввел в своем ответе значение 15/20? Я использовал while num1 != '?/?': но это не работает. (Я использую ? в качестве заполнителя)

timgeb
8 апреля 2018 в 10:00
0

num != 15 or num != 20?

Ububtunoob
8 апреля 2018 в 10:06
0

Пользователь вводит условие в формате 12/15. Я не знаю, какими будут эти два числа, поэтому я не могу жестко закодировать их в условии. Я хотел бы просто сказать, в то время как num1!= string/string. Это означает, что пользователь ввел два числа (строки) в формате 15/20. Одна цифра, потом "/", потом еще одна цифра

timgeb
8 апреля 2018 в 10:13
0

split строка на /, затем try/except преобразует два поля результата в int. Это действительно очень, очень похоже на примеры в повторяющемся вопросе.

Ответы (3)

avatar
user8190410
8 апреля 2018 в 18:23
1

вы можете использовать регулярные выражения для соответствия, например

import re

input_str = input("Please enter your score in the form socre/max(eg. 30/50)")

while re.match(r'[0-9]+/[0-9]+',input_str) == None:
    input_str = input("Please enter your score in the form socre/max(eg. 30/50)")

print('matched')
Ububtunoob
9 апреля 2018 в 08:06
0

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

avatar
Sanyam Khurana
9 апреля 2018 в 11:53
0

Вы можете сделать это следующим образом:

while True:
    score_input = input("Please enter your score in the form socre/max(eg. 30/50)")
    try:
        score, max_score = score_input.split('/')
    except ValueError:
        continue
    if score > max_score:
        raise ValueError("Score cannot be greater than max. score")
    # Do whatever you wanto to do with score and max_score and remember to break out.

Надеюсь, это поможет!

avatar
Aniket Bote
8 апреля 2018 в 18:53
0

код:

import re
score = input("enter score")
while re.match(r'([0-1][0-5])/15',score) == None:
    score = input("enter score")

для этого потребуется только оценка от 0 до 15 из 15 если вы хотите изменить это, вы можете изменить это условие

[0-1][0-5])/15
[0-1]=stand for first digit
[0-5]=stands for second digit
/15=stands for outof 15

например, если вы хотите из 30

[0-3][0-9])/30