【问题标题】:Trying to acess the dictionary values in another function尝试访问另一个函数中的字典值
【发布时间】:2019-05-16 13:23:30
【问题描述】:

你开得太快了,警察拦住了你。编写代码来计算结果,编码为 int 值:0=无票,1=小票,2=大票。如果速度小于等于 60,则结果为 0。如果速度介于 61 和 80 之间,则结果为 1。如果速度大于或等于 81,则结果为 2。除非是你的生日——那天,你的在所有情况下,速度都可以提高 5 倍。

为此,我实际上考虑创建字典。我的第一个功能与字典的创建有关。第二个将返回 0,1 或 2,具体取决于我的输入速度。生日部分我稍后会解决。我只是需要帮助来访问字典的值

def code_computing():
  code_rules={'No ticket':0,'Small ticket':1,'Big ticket':2}
  return code_rules
print(code_computing())

def speed_limits():
  speed=int(input('Digit your current speed\n'))
  code_computing()
  while speed>=0:
    if 0<=speed<=60:
      traffic_ticket=code_rules['No ticket']
      print('You have only received a warning')
      return 0
    elif 61<=speed<=80:
      traffic_ticket=code_rules['Small ticket'] 
      print('You will pay  a small amount')
    return 1
    elif speed>=80:
      traffic_ticket=code_rules['Big ticket']
      print('You will pay the highest amount')
    return 2
    else:
      print('Enter a correct speed value to evaluate')
      break
print(speed_limits())

它给了我一个 elif speed>80 的语法错误

【问题讨论】:

  • 请将回溯添加到您的问题。

标签: python dictionary


【解决方案1】:

语法错误是由于您的布尔比较造成的。当您在 if 语句中使用多个条件时,您必须将它们分开如下:

if 0 <= speed & speed <= 60:

根据您的所有条件执行此操作,您会很顺利。

否则,您可以对代码进行一些小改进。首先,您的字典不需要函数。否则,您将在每次调用 speed_limits 函数时创建字典。

你可以这样做:

def speed_limits(speed, code_rules):
    while speed >= 0:
        if 0 <= speed & speed <= 60:
            traffic_ticket = code_rules['No ticket']
            print('You have only received a warning')
            return 0
        elif 61 <= speed & speed <= 80:
            traffic_ticket = code_rules['Small ticket'] 
            print('You will pay  a small amount')
            return 1
        elif speed >= 80:
            traffic_ticket = code_rules['Big ticket']
            print('You will pay the highest amount')
            return 2
        else:
            print('Enter a correct speed value to evaluate')
            break

code_rules={'No ticket':0,'Small ticket':1,'Big ticket':2}

In [1] : print(speed_limits(65, code_rules))
Out[1] : You will pay  a small amount
1

【讨论】:

    【解决方案2】:

    您的返回语句return 1 没有正确缩进。缩进在python中非常重要。

    def code_computing():
        code_rules = {'No ticket': 0, 'Small ticket': 1, 'Big ticket': 2}
        return code_rules
    
    
    code_rules = code_computing()
    print(code_rules)
    
    
    def speed_limits():
        speed = int(input('Digit your current speed\n'))
        code_computing()
        while speed >= 0:
            if 0 <= speed <= 60:
                traffic_ticket = code_rules['No ticket']
                print('You have only received a warning')
                return 0
            elif 61 <= speed <= 80:
                traffic_ticket = code_rules['Small ticket']
                print('You will pay  a small amount')
                return 1
            elif speed >= 80:
                traffic_ticket = code_rules['Big ticket']
                print('You will pay the highest amount')
                return 2
            else:
                print('Enter a correct speed value to evaluate')
                break
    
    
    print(speed_limits())
    
    

    试试上面的

    【讨论】:

    • 我已经修复了退货,它说我的 code_rules 没有定义
    • code_rules 在code_computing 函数中定义,但在speed_limits 函数中访问。所以我创建了一个全局同名变量。我已经通过编辑粘贴了代码。试试这个。
    • code_rules 的全局变量必须有函数名吗?
    • 变量名可以是任何东西。同样code_rules = code_computing()在这里,我们正在调用 code_computing 函数并将返回的值分配给 code_rules 变量。
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多