Python:同时检查三个变量的值

时间:2018-10-15 14:48:53

标签: python string string-conversion

我有三个随机生成的浮点数,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 :(得分:2)

我将这个问题解释为“我想将每个浮点数转换为字符串,但是添加很多空格以使它们恰好长7个空格”。

您实际上不需要任何条件。 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'

答案 1 :(得分:0)

这是组合三个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