У меня есть три случайно сгенерированных поплавка, a, b и c:
a = np.random.uniform(-99.999, 99.999)
b = np.random.uniform(-99.999, 99.999)
c = np.random.uniform(-99.999, 99.999)
И я хотел бы вернуть их в следующем формате:
1 2 3 4 5
123456789012345678901234567890123456789012345678901234567
#########################################################RULER
SOMETHING ELSE ~ ~ ~ ~ -XX.XXX -XX.XXX -XX.XXX
Теперь мне нужно проверить:
Таким образом, каждое значение переменных a, b и c может быть (положительным или отрицательным) и (выше 10 или ниже 10), и цель состоит в том, чтобы записать число всегда в то же самое местоположение (скорректированное пробелами).
Пока проблема.
Мои знания python по-прежнему довольно простые. Что бы я сделал, вероятно, было бы задействовано более 50 строк кода, в том числе...
if x >= 0 and x // 10 != 0: #check if x is larger than 0 and has two digits
if y >= 0 and y // 10 != 0: #check if y is larger than 0 and has two digits
...
но должно быть более элегантное решение, возможно, даже один лайнер.
Я интерпретирую этот вопрос как "Я хочу преобразовать каждое из своих поплавков в строку, добавляя, однако, много пробелов, чтобы сделать их ровно семь пробелов".
На самом деле вам не нужны какие-либо условные обозначения. Метод str.format может применять дополнение к вашему значению без необходимости подсчета десятичных знаков или чего-либо еще.
>>> a = 1.0
>>> b = -23.42
>>> c = 5.678
>>> result = "{: 7} {: 7} {: 7}".format(a,b,c)
>>> print(result)
1.0 -23.42 5.678
Если вы думаете "хорошо, но я также хочу, чтобы число отображало ровно три цифры после десятичной точки, даже если они нули", тогда вы можете сделать:
>>> "{:7.3f} {:7.3f} {:7.3f}".format(a,b,c)
' 1.000 -23.420 5.678'
Если вы думаете "хорошо, но я также хочу, чтобы прокладка появлялась после знака, но перед цифрами", вы можете сделать следующее:
>>> a = -1.0
>>> "{:=7.03f} {:=7.03f} {:=7.03f}".format(a,b,c)
'- 1.000 -23.420 5.678'
Если вы думаете "хорошо, но может ли заполнение быть нулями вместо пробелов? Итак, каждое число имеет ровно две цифры перед десятичной точкой", то вы можете сделать:
>>> "{:0= 7.03f} {:0= 7.03f} {:0= 7.03f}".format(a,b,c)
'-01.000 -23.420 05.678'
Это один из способов объединить ваши три утверждения if. Вы можете расширить эту идею для своей задачи
x, y, z = 12, 24, 16
if all(item > 0 and item // 10 != 0 for item in [x,y,z]):
print ("Condition matched")
else:
print ("Condition not matched")
# x, y, z = 12, 24, 16
# Condition matched
# x, y, z = 12, 24, 6
# Condition not matched