为什么输出在逻辑上不正确?

时间:2018-12-11 15:36:00

标签: json python-3.x if-statement

我正在尝试实现此代码。这里有问题:
1.我想在进一步的编码中使用变量typ_transport,而不只是在if内部使用。(它无法识别该变量。)
2.逻辑似乎是正确的,但是当我更改jsonStr中的值时(例如“ walk”:true到“ walk”:fasle),输出将不会输出正确的输出。

有人可以帮助我吗?谢谢

import json

jsonStr = '{"walk" : true, "bike" : false, "tram" : false}'
inputvar = json.loads(jsonStr)



if inputvar['walk'] == 'True' and inputvar['bike'] == 'False' :
    typ_transport='foot'

elif inputvar['walk'] == 'False' and inputvar['bike'] == 'True'  :
    typ_transport='bicycle'

class transport:


    if typ_transport=='foot':
        velocity=80
        typ='foot'
    elif typ_transport=='bicycle':
        velocity=330
        typ='bicycle'

    def __init__(self,typ,velocity):

        self.velocity = velocity
        self.typ = typ    

if  inputvar['tram'] == 'False' :

    radius= T*transport.velocity
    print (radius) 
else :
    print (typ_transport, 333) 

2 个答案:

答案 0 :(得分:1)

我在代码中看到了一些问题,因此在尝试您的问题时,我会尝试指出这些问题

  
      
  1. 我想在进一步的编码中使用变量typ_transport而不只是在if内部(它不能识别该变量。)
  2.   

之所以无法访问typ_transport变量,是因为它是在if语句中创建的。如果您希望在代码的后面访问变量,则必须将typ_transport的范围更改为全局范围。

您可以通过两种方式执行此操作。首先是在开始if语句之前创建全局变量

typ_transport = ""
if inputvar['walk'] == True and inputvar['bike'] == False:
     typ_transport = 'foot'

第二种方法是使用global关键字在if语句内创建一个全局变量。不建议使用这种方法,因为这样很容易丢失变量及其范围的踪迹。

  
      
  1. 逻辑似乎是正确的,但是当我更改jsonStr中的值时(例如“ walk”:true到“ walk”:fasle),输出将不会输出正确的输出
  2.   

除了您遇到的拼写错误外,Python布尔值还保存在TrueFalse中(不带单引号,首字母大写)。使用JSON模块时,它应该可以正确解析,但是反复检查始终是个好主意。

最后,您正在使用类,但它不是有组织的。让我们尝试使其看起来更整洁。

class transport:
    def __init__(self,typ_transport):   #utilizing global variable we created
       if typ_transport == 'foot':
            velocity = 80
            self.typ_transport = self.typ_transport
            self.velocity = velocity 
       elif typ_transport == 'bicycle':
             ......

现在获取typ_transport = 'foot'

时的速度
passenger = transport(typ_transport)      #creating passenger object
velocity = passenger.velocity

答案 1 :(得分:0)

import json

jsonStr = ('[{"walk" : true, "bike" : false, "tram" : false}, '
            '{"walk" : false, "bike" : true, "tram" : false}, '
            '{"walk" : false, "bike" : false, "tram" : true},'
            '{"walk" : false, "bike" : false, "tram" : false}]'
            )
inputvar = json.loads(jsonStr)

class Transport:
    def __init__(self,typ):
        self.typ = typ
        self.velocity = None
        if typ == 'foot':
            self.velocity = 80
        elif typ == 'bicycle':
            self.velocity = 330
        elif typ == 'tram':
            self.velocity = 333

for var in inputvar:
    typ_transport = None
    if var['walk'] is True and var['bike'] is False:
        typ_transport = 'foot'
    elif var['walk'] is False and var['bike'] is True:
        typ_transport = 'bicycle'
    elif var['tram'] is True:
        typ_transport = 'tram'

    transport = Transport(typ_transport)

    print(transport.typ, transport.velocity)

这对我来说更有意义。 如果我误解了您的逻辑,请随时进行更改。