所以我需要做一个柱状图。我当前的打印看起来像这样,来自我在文章底部的代码。在比较my输出和示例输出时,可以看到一些问题
问题1:星星的数量仅与输入的数字相对应。所以如果我输入100,50,20,1,它会打印出100颗星,50颗星,20颗星和一颗星,最小的4个范围
问题2:除了未考虑的范围之外,空范围还需要像示例中那样可见
我已经考虑了一段时间,但就是找不到任何好的解决办法。我也是python新手…那么…帮帮忙
我的直方图现在是什么样子的:
Enter energy consumption data.
End by entering an empty line.
Enter energy consumption (kWh): 5
Enter energy consumption (kWh): 3
Enter energy consumption (kWh): 2
Enter energy consumption (kWh): 1
Enter energy consumption (kWh):
0-9: *****
10-99: ***
100-999: **
1000-9999: *
这就是它应该看起来的样子
Enter energy consumption data.
End by entering an empty line.
Enter energy consumption (kWh): 91
Enter energy consumption (kWh): 10
Enter energy consumption (kWh): 1001
Enter energy consumption (kWh): 5005
Enter energy consumption (kWh): 22
Enter energy consumption (kWh): 6
Enter energy consumption (kWh):
0-9: *
10-99: ***
100-999:
1000-9999: **
我的代码:
def user_input():
list1 = []
value = input("Enter energy consumption (kWh): ")
while value != "":
value = int(value)
if value >= 0:
list1.append(value)
else:
print(f"You entered: {value}. Enter non-negative numbers only!")
value = input("Enter energy consumption (kWh): ")
return list1
def determine_class(value):
class_number = 1
while True:
if class_minimum_value(class_number) <= value <= class_maximum_value(
class_number):
return class_number
class_number += 1
def class_minimum_value(class_number):
smallest_value = 10 ** class_number // 100 * 10
return smallest_value
def class_maximum_value(class_number):
largest_value = 10 ** class_number - 1
return largest_value
def class_listing(list1):
number_of_categories = determine_class(max(list1))
category_list = [0] * number_of_categories
for value in list1:
category = determine_class(value)
category_list[category-1] += 1
return category_list
def print_histogram(class_listing):
for i in range(len(class_listing)):
print_single_histogram_line(i+1, class_listing[i], len(class_listing))
def main():
print("Enter energy consumption data.")
print("End by entering an empty line.")
print()
input_data = user_input()
if len(input_data) == 0:
print("Nothing to print. Done.")
return
class_different = class_listing(input_data)
print_histogram(input_data)
def print_single_histogram_line(class_number, count, largest_class_number):
min_value = class_minimum_value(class_number)
max_value = class_maximum_value(class_number)
range_string = f"{min_value}-{max_value}"
largest_width = 2 * largest_class_number + 1
print(f"{range_string:>{largest_width}}: {'*' * count}")
if __name__ == "__main__":
main()
在您的代码中导航有点困难,但在我看来,您的主要问题是收集一个按需打印直方图的文件,因此只有对于该部分,您才能看到下面的代码,该代码接收项目列表(对应于您的
m_input
变量),将其传输到直方图,并按您的需要格式化打印:输出:
正如我所期望的那样,这符合你的要求吗
编辑以对直方图打印执行
rjust
,以精确匹配预期输出相关问题 更多 >
编程相关推荐