«Я предполагаю, что есть некоторая логика решения о размещении этих методов в том месте, где они есть».
blockquote>Хотя это часто верно, я обнаружил, что когда что-то не работает , это предположение обычно происходит там, где вы вводите в заблуждение.
Язык находится в постоянном развитии, с того дня, когда кто-то предлагает новый язык в тот момент, когда он устарел. Между этими крайностями есть несколько этапов, которые проходят язык. Особенно, если кто-то тратит на нее деньги и хочет, чтобы люди использовали его, часто возникает очень странная фаза перед или после первого выпуска:
« нам нужно, чтобы это работало вчера ".
Здесь происходит нечто подобное, у вас есть почти полный язык, но программистам нужно что-то сделать, чтобы показать, что может сделать язык, или для конкретного приложения требуется функция который не был разработан на языке.
Итак, где мы добавляем эту функцию? - ну, где это имеет смысл для этого конкретного программиста, которому поручено «заставить его работать вчера».
Логика может заключаться в том, что именно здесь функция имеет наибольший смысл, так как она не делает «не принадлежит нигде, и он не заслуживает собственного класса. Это также может быть что-то вроде: до сих пор мы никогда не делали копию массива, не используя систему .. позволяет помещать туда arraycopy и сохранять всех добавочных включений.
- в следующем генерация языка, люди не будут перемещать эту функцию, поскольку некоторые опытные программисты будут жаловаться. Таким образом, эта функция может быть дублирована и найдена в месте, где это имеет смысл.
гораздо позже, он будет отмечен как устаревший и удален, если кто-то хочет его очистить. .
Вы можете использовать регулярные выражения и написать функцию, которая делает именно то, что вам нужно, тогда вы можете использовать ее в своей функции 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
, то есть сторона, подлежащая прокатке, должна быть меньше числа сторон, присутствующих в кости.
Что-то вроде ниже - альтернативный подход к использованию регулярного выражения. Если вам удобно с регулярным выражением, то я предпочел бы использовать это вместо этого. Это только альтернативный подход.
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")