Используйте оператор while, пока пользователь не вводит истинное значение, и если входное значение не является числом или это значение null, пропустите его и попробуйте снова и так далее. В примере я попытался ответить на действительно ваш вопрос. Если мы предположим, что наш возраст составляет от 1 до 150, тогда принимается входное значение, иначе это неправильное значение. Для завершения программы пользователь может использовать клавишу 0 и вводить ее как значение.
Примечание: прочитайте комментарии вверху кода.
blockquote># If your input value is only a number then use "Value.isdigit() == False". # If you need an input that is a text, you should remove "Value.isdigit() == False". def Input(Message): Value = None while Value == None or Value.isdigit() == False: try: Value = str(input(Message)).strip() except InputError: Value = None return Value # Example: age = 0 # If we suppose that our age is between 1 and 150 then input value accepted, # else it's a wrong value. while age <=0 or age >150: age = int(Input("Please enter your age: ")) # For terminating program, the user can use 0 key and enter it as an a value. if age == 0: print("Terminating ...") exit(0) if age >= 18 and age <=150: print("You are able to vote in the United States!") else: print("You are not able to vote in the United States.")
Описание и примеры можно найти в IEEE Std 1800-2012 & sect; 11.5.1 «Выделение векторного бита и выбор адреса». Первое появление IEEE - IEEE 1364-2001 (Verilog) & sect; 4.2.1 «Идентификация векторного бита и выбора части». Вот прямой пример из LRM:
blockquote>logic [31: 0] a_vect; logic [0 :31] b_vect; logic [63: 0] dword; integer sel; a_vect[ 0 +: 8] // == a_vect[ 7 : 0] a_vect[15 -: 8] // == a_vect[15 : 8] b_vect[ 0 +: 8] // == b_vect[0 : 7] b_vect[15 -: 8] // == b_vect[8 :15] dword[8*sel +: 8] // variable part-select with fixed width
Если
sel
равно 0, тогдаdword[8*(0) +: 8] == dword[7:0]
Еслиsel
равно 7, тогдаdword[8*(7) +: 8] == dword[63:56]
Значение слева всегда является начальным индексом. Число справа - это ширина и должна быть положительной константой.
+
и-
указывают на выбор битов более высокого или более низкого значения индекса, а затем начального индекса.Предполагая, что
address
находится в формате little endian ([msb: lsb]), тогдаif(address[2*pointer+:2])
является эквивалентомif({address[2*pointer+1],address[2*pointer]})
Это еще один способ указать диапазон битового вектора.
x +: N, Начальная позиция вектора задается x, и вы считаете вверх от x на N.
Существует также
x -: N, в этом случае стартовая позиция равна x и вы считаете вниз от x на N .
N является константой, а x - выражением, которое может содержать итераторы.
У него есть несколько преимуществ -
a_vect[15 : -16]
. Попробуйте и узнайте – Greg 2 November 2017 в 20:26