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

Python:同时检查三个变量的值,python,string,string-conversion,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 123456789012345678901234567890123456789012

我有三个随机生成的浮动,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 
      ...

但必须有一个更优雅的解决方案,甚至可能只有一行

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

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

我把这个问题解释为“我想把我的每个浮点数转换成一个字符串,加上多少空格就可以使它们正好有七个空格长”

你实际上不需要任何条件。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'
如果您想“好的,但我也希望填充显示在符号后面,但在数字之前”,那么您可以执行以下操作:

>>> "{: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'
如果您在想“好的,但是填充可以是零而不是空格吗?那么每个数字在小数点前正好有两位数”,那么您可以执行以下操作:

>>> "{: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'

我把这个问题解释为“我想把我的每个浮点数转换成一个字符串,加上多少空格就可以使它们正好有七个空格长”

你实际上不需要任何条件。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'
如果您想“好的,但我也希望填充显示在符号后面,但在数字之前”,那么您可以执行以下操作:

>>> "{: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'
如果您在想“好的,但是填充可以是零而不是空格吗?那么每个数字在小数点前正好有两位数”,那么您可以执行以下操作:

>>> "{: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'

好的,但是现在,你必须对所有负数x,y,z做另一个这样的陈述,然后还有所有的组合。如果OP只需要回答“我的三个值都符合我设定的标准吗?”,这是一个令人满意的解决方案。但我得到的印象是,他们实际上在寻找更详细的信息,即“我的哪些价值观符合标准,具体来说,哪些部分符合标准,哪些部分不符合标准?”@Kevin:好的,但如果是这样的话,一条线就太过雄心勃勃了,如果可能的话,太让人困惑了。我会留下我的答案,以防OP可以按照这些思路构建一些东西。如果需要的话,我可以删除它。好吧,但是现在,你必须对所有负数x,y,z做另一个这样的陈述,然后还有所有的组合。如果OP只需要回答“我的三个值都符合我设定的标准吗?”,这是一个令人满意的解决方案。但我得到的印象是,他们实际上在寻找更详细的信息,即“我的哪些价值观符合标准,具体来说,哪些部分符合标准,哪些部分不符合标准?”@Kevin:好的,但如果是这样的话,一条线就太过雄心勃勃了,如果可能的话,太让人困惑了。我会留下我的答案,以防OP可以按照这些思路构建一些东西。如果需要,我可以删除它