Python 3.7: Как проверить, находится ли пользовательский ввод в определенном формате, например & ldquo; XdY & rdquo ;, а затем, если неверный запрос снова для ввода?

«Я предполагаю, что есть некоторая логика решения о размещении этих методов в том месте, где они есть».

Хотя это часто верно, я обнаружил, что когда что-то не работает , это предположение обычно происходит там, где вы вводите в заблуждение.

Язык находится в постоянном развитии, с того дня, когда кто-то предлагает новый язык в тот момент, когда он устарел. Между этими крайностями есть несколько этапов, которые проходят язык. Особенно, если кто-то тратит на нее деньги и хочет, чтобы люди использовали его, часто возникает очень странная фаза перед или после первого выпуска:

« нам нужно, чтобы это работало вчера ".

Здесь происходит нечто подобное, у вас есть почти полный язык, но программистам нужно что-то сделать, чтобы показать, что может сделать язык, или для конкретного приложения требуется функция который не был разработан на языке.

Итак, где мы добавляем эту функцию? - ну, где это имеет смысл для этого конкретного программиста, которому поручено «заставить его работать вчера».

Логика может заключаться в том, что именно здесь функция имеет наибольший смысл, так как она не делает «не принадлежит нигде, и он не заслуживает собственного класса. Это также может быть что-то вроде: до сих пор мы никогда не делали копию массива, не используя систему .. позволяет помещать туда arraycopy и сохранять всех добавочных включений.

  • в следующем генерация языка, люди не будут перемещать эту функцию, поскольку некоторые опытные программисты будут жаловаться. Таким образом, эта функция может быть дублирована и найдена в месте, где это имеет смысл.

гораздо позже, он будет отмечен как устаревший и удален, если кто-то хочет его очистить. .

0
задан qgloaf 13 July 2018 в 18:00
поделиться

2 ответа

Вы можете использовать регулярные выражения и написать функцию, которая делает именно то, что вам нужно, тогда вы можете использовать ее в своей функции roller():

import re

def get_number():
    user_number1 = input("Please input the dice you want to use in the following format: XdY > ")
    user_number_fin = re.match("^(\\d*)d(\\d+)$",user_number1,re.I)
    if not user_number_fin: get_number()
    if user_number_fin.group(1) =='': num1 = 1
    else: num1 = int(user_number_fin.group(1)) 
    num2 = int(user_number_fin.group(2)) 
    if num1>num2:
        print("\n\tSorry--side to roll must be less than the number of sides!!")
        get_number()
    return {'num1':num1,'num2':num2}

Это может принять d4, т.е. принять значение по умолчанию если он не задан равным 1 и не может принять 4d3, то есть сторона, подлежащая прокатке, должна быть меньше числа сторон, присутствующих в кости.

0
ответ дан Onyambu 17 August 2018 в 12:18
поделиться

Что-то вроде ниже - альтернативный подход к использованию регулярного выражения. Если вам удобно с регулярным выражением, то я предпочел бы использовать это вместо этого. Это только альтернативный подход.

def roller():
user_number1 = input("Please input the dice you want to use in the following format: XdY > ")
if("d" in user_number1):
    if(len(user_number1) == 3):
        user_number_fin = user_number1.split("d")
        num1 = int(user_number_fin[0])
        num2 = int(user_number_fin[1])
 else:
     print("Your input not in valid format. Use the format XdX")    
0
ответ дан Syed 17 August 2018 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: