почему вывод не является логически правильным? - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь реализовать этот код.Вот проблемы:
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 голосов
/ 11 декабря 2018

Я вижу некоторые проблемы в коде, поэтому я постараюсь указать на них, когда я отвечу на ваши вопросы

  1. Я хочу использовать переменную typ_transport для дальнейшего кодирования, а не только внутриif. (он не распознает переменную.)

Причина, по которой вы не можете получить доступ к переменной typ_transport, заключается в том, что она создана внутри оператора if.Если вы захотите получить доступ к переменной позже в коде, вам придется изменить область действия typ_transport на глобальную область.

Это можно сделать двумя способами.Первый - создание глобальной переменной перед запуском оператора if

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

Второй - создание глобальной переменной внутри оператора if с использованием ключевого слова global.Этот способ крайне не рекомендуется, поскольку легко потерять след переменных и их областей.

логика кажется правильной, но когда я изменяю значения в jsonStr (например, "walk": true на "walk": fasle), вывод не выводит правильный вывод

Помимо орфографических ошибок, которые вы получили, логические значения Python хранятся в True и False (без одинарных кавычек, первая буква заглавная).Когда вы используете модуль 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
0 голосов
/ 11 декабря 2018
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)

Это имеет больше смысла для меня.Не стесняйтесь изменить это, если я неправильно понял вашу логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...