Python: проверка значений трех переменных одновременно - PullRequest
0 голосов
/ 15 октября 2018

У меня есть три случайно сгенерированных числа с плавающей точкой, 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

Теперь мне нужноспособ проверки:

  • Во-первых, если каждая переменная положительна или отрицательна, потому что знак всегда был в позиции 34 (a), 42 (b) и 50 (c), если соответствующийзначение отрицательное.
  • Во-вторых, если число перед запятой / точкой имеет две цифры или одну цифру.Во втором случае нам понадобится еще один пробел.

Таким образом, каждое значение переменных 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 
      ...

, но должно быть более элегантное решение, возможно, даже один вкладыш.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я интерпретирую этот вопрос как «Я хочу преобразовать каждый из моих чисел с плавающей точкой в ​​строку, добавляя, однако, сколько нужно пробелов, чтобы сделать их ровно семью пробелами».

На самом деле вам не нужно любые условия для этого.Метод 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'
0 голосов
/ 15 октября 2018

Это один из способов объединить ваши три оператора 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
...