【问题标题】:printing the correct value from a list从列表中打印正确的值
【发布时间】:2022-01-19 11:56:48
【问题描述】:

我正在尝试让我的列表打印正常范围(38.3 和 39.2)内的温度总量。当它打印时它只是说总量是 0.0 但从下面显示的温度来看它应该是 50% 任何帮助将不胜感激!

temperatures = [38.4, 38.5, 39.3, 39.1, 38, 36.5]

total_temperatures = len(temperatures)

normal_temperatures = 0

for temp in range(total_temperatures):
    if temp >= 38.3 and temp <= 39.2:
        normal_temperatures = normal_temperatures + 1


percentage = normal_temperatures * 100 / total_temperatures
percentage = round(percentage, 1)

print('The percentage of temperatures that lie within the normal range is', percentage)

【问题讨论】:

  • 你在做for temp in range(total_temperatures),所以temp是索引,而不是值。
  • 您正在迭代 total_temperatures = len(temperatures),在这种情况下,temp 变量将采用值 0, 1, 2, 3, 4, 5。改为for temp in temperatures
  • 调试小程序,PythonTutor是一个非常有用的工具。

标签: python list


【解决方案1】:

for temp in range(total_temperatures): 替换为for temp in temperatures: 您想比较的是温度值,而不是某个范围内的索引。

【讨论】:

    【解决方案2】:

    这是正确的代码:

    temperatures = [38.4, 38.5, 39.3, 39.1, 38, 36.5]
    
    total_temperatures = len(temperatures)
    
    normal_temperatures = 0
    for temp in temperatures:
        if temp >= 38.3 and temp <= 39.2:
            normal_temperatures = normal_temperatures +1
    percentage = normal_temperatures * 100 / total_temperatures
    percentage = round(percentage, 1)
    
    print('The percentage of temperatures that lie within the normal range is', percentage)
    

    【讨论】:

      【解决方案3】:

      或者你可以使用一些列表理解:

      temperatures = [38.4, 38.5, 39.3, 39.1, 38, 36.5]
      normal_temperatures = [x for x in temperatures if x>= 38.3 and x<= 39.2]
      total_temperatures = len(temperatures)
      normal_temp_len = len(normal_temperatures)
      percentage = normal_temp_len*100/total_temperatures
      percentage = round(percentage, 1)
      
      

      【讨论】:

        【解决方案4】:

        我已经做到了……:

        temperatures = [38.4, 38.5, 39.3, 39.1, 38, 36.5]
        
        total_temperatures = len(temperatures)
        
        normal_temperatures = 0
        print("DEBUG")
        print(total_temperatures)
        
        for temp in (temperatures):
            if temp >= 38.3 and temp <= 39.2:
                normal_temperatures = normal_temperatures + 1
        
        print("DEBUG")
        print(normal_temperatures)
        print("DEBUG")
        
        percentage = normal_temperatures * 100 / total_temperatures
        percentage = round(percentage, 1)
        
        print(f"The percentage of temperatures that lie within the normal range is', {percentage}")
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案5】:

        我使用sum() 和生成器理解来大大缩短您的代码:

        temperatures = [38.4, 38.5, 39.3, 39.1, 38, 36.5]
        
        total_temperatures = len(temperatures)
        
        normal_temperatures = sum(1 for t in temperatures if 38.3<= t <= 39.2)
        
        percentage = normal_temperatures * 100 / total_temperatures
        percentage = round(percentage, 1)
        
        print('The percentage of temperatures that lie within the normal range is', percentage)
        

        【讨论】:

          猜你喜欢
          • 2011-07-23
          • 1970-01-01
          • 2021-04-09
          • 2021-06-17
          • 1970-01-01
          • 1970-01-01
          • 2021-05-25
          • 2020-07-28
          相关资源
          最近更新 更多