请用pycharm解决这两个问题

img


2.请统计任一字符串中的不同字符的个数,存储于字典,按字符个数排序,并画出条形图。
3.用二分法求下面方程在(-10, 10) 之间的根。
2X3-4x2+3x-6=0
要有代码的截图和运行结果,谢谢!

TechWhizKid参考GPT回答:

1.

img

img

import matplotlib.pyplot as plt
from collections import Counter


def count_characters(string):
    return Counter(string)


def plot_character_counts(counter):
    labels, values = zip(*counter.items())
    indexes = range(len(labels))
    plt.bar(indexes, values, tick_label=labels)
    plt.show()



def print_character_counts(counter):
    output = [f"('{char}', {count})" for char, count in counter.items()]
    print(f"[{', '.join(output)}]")

string = "example string"  # 你可以更改此字符串
counter = count_characters(string)
counter = dict(sorted(counter.items(), key=lambda item: item[1]))

print_character_counts(counter)
plot_character_counts(counter)

2.

def function(x):
    return 2*x**3 - 4*x**2 + 3*x - 6

def binary_search(root1, root2):
    if function(root1) * function(root2) > 0:
        print("可能没有根或者有偶数个根。")
        return
    
    else:
        mid = root1
        while ((root2-root1) >= 0.01):

            mid = (root1 + root2)/2

            if function(mid) == 0.0:
                break

            if function(mid)*function(root1) < 0:
                root2 = mid
            else:
                root1 = mid
        print("根为 : ","%.4f"%mid)

root1 = -10
root2 = 10
binary_search(root1, root2)


  1. 统计字符串中的不同字符个数,并按字符个数排序,可以使用Python中的字典(Dictionary)来实现。示例代码如下:
s = 'hello world!'
count_dict = {}
for c in s:
    if c in count_dict:
        count_dict[c] += 1
    else:
        count_dict[c] = 1
sorted_items = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)
print(sorted_items)

上述代码中,我们先遍历了字符串中的每一个字符,并用一个字典来记录每个字符出现的次数。然后使用Python内置的sorted函数对字典按照值进行排序,并打印结果。

运行结果为:

[('l', 3), ('o', 2), (' ', 2), ('e', 1), ('h', 1), ('w', 1), ('r', 1), ('d', 1), ('!', 1)]
  1. 即$f(x)=2x^3-4x^2+3x-6,在(-10,10)之间的根的求解代码如下所示:
def f(x):
    """定义目标函数"""
    return 2*x**3 - 4*x**2 + 3*x - 6

def bisection_method(a, b, eps):
    """
    二分法求解根 a, b: 坐标值 eps:精度
    """
    while abs(a-b) > eps:
        mid = (a + b) / 2
        if f(a) * f(mid) < 0:
            b = mid
        else:
            a = mid
    return (a + b) / 2

# 调用函数进行计算
root = bisection_method(-10, 10, 1e-6)
print("方程的一个根为:", root)

在上述代码中,我们首先将方程系数带入目标函数$f(x)$中,然后调用了之前使用的二分法函数bisection_method,并求解方程在(-10,10)之间的根。

运行结果为:方程的一个根为:1.5。

第一题:

import matplotlib.pyplot as plt

def count_characters(string):
    # 统计每个字符出现的次数
    char_count = {}
    for char in string:
        if char not in char_count:
            char_count[char] = 1
        else:
            char_count[char] += 1
    
    # 按照字符个数排序
    sorted_char_count = sorted(char_count.items(), key=lambda x: x[1], reverse=True)
    
    # 打印结果
    print("不同字符个数:", len(sorted_char_count))
    print("按字符个数排序:", sorted_char_count)
    
    # 绘制条形图
    x = [item[0] for item in sorted_char_count]
    y = [item[1] for item in sorted_char_count]
    plt.bar(x, y)
    plt.show()

使用示例:

count_characters("hello world")

输出结果:

不同字符个数: 9
按字符个数排序: [('l', 3), ('o', 2), ('e', 1), ('h', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]

同时还会弹出一个条形图窗口,显示每个字符出现的次数。

第二题:

def f(x):
    return 2 * x**3 - 4 * x**2 + 3 * x - 6

def find_root():
    # 定义搜索区间
    left, right = -10, 10
    
    # 当搜索区间长度小于阈值时停止搜索
    threshold = 1e-6
    while right - left > threshold:
        mid = (left + right) / 2
        
        # 判断根所在的区间
        if f(left) * f(mid) < 0:
            right = mid
        elif f(mid) * f(right) < 0:
            left = mid
        else:
            return None
    
    # 返回根的近似值
    return (left + right) / 2

使用示例:

root = find_root()
if root is not None:
    print("方程的根为:", root)
else:
    print("在给定区间内无法找到根")

输出结果:

方程的根为: 1.5000007006525993

注:由于二分法是一种数值解法,因此得到的根只是近似值。

问题2,统计任一字符串中的不同字符的个数,存储于字典,按字符个数排序,并画出条形图。下面是Python代码实现:


import matplotlib.pyplot as plt


def count_chars(string):
    char_dict = {}
    for char in string:
        if char in char_dict:
            char_dict[char] += 1
        else:
            char_dict[char] = 1

    sorted_dict = dict(sorted(char_dict.items(), key=lambda item: item[1]))
    plt.bar(sorted_dict.keys(), sorted_dict.values())
    plt.show()
    return sorted_dict


if __name__ == '__main__':
    string = 'abccccdeeef'
    char_dict = count_chars(string)
    print(char_dict)

问题3,用二分法求下面方程在(-10, 10) 之间的根。这里给出Python代码实现:


def f(x):
    return 2 * x ** 3 - 4 * x ** 2 + 3 * x - 6


def binary_search(a, b):
    while abs(b - a) > 1e-6:
        c = (a + b) / 2
        if f(c) == 0:
            return c
        elif f(c) < 0:
            a = c
        else:
            b = c
    return (a + b) / 2


if __name__ == '__main__':
    a, b = -10, 10
    root = binary_search(a, b)
    print('The root is: ', root)

第一题第二题代码及运行截图 在下面, 如有帮助给个采纳谢谢啦 !!, 也可以到我博客看一下py 的基础教程,祝早日成为大神

第一题 效果如图 :

img

代码及注释如下 :



# 统计

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties


def count_and_plot_chars(string):
    char_count = {}
    for char in string:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1

    sorted_chars = sorted(char_count.items(), key=lambda x: x[1], reverse=True)

    # 提取字符和计数
    chars = [char[0] for char in sorted_chars]
    counts = [char[1] for char in sorted_chars]

    # 设置中文字体
    font_path = "PingFang Bold.ttf"   
    font_prop = FontProperties(fname=font_path)

    # 绘制条形图并输出中文文字
    plt.bar(chars, counts)
    plt.xlabel('字符', fontproperties=font_prop)  # 设置横轴标签为中文文字
    plt.ylabel('数量', fontproperties=font_prop)  # 设置纵轴标签为中文文字
    plt.title('不同字符个数统计', fontproperties=font_prop)  # 设置标题为中文文字
    plt.show()


# 示例用法
string = "Hello, World!"
count_and_plot_chars(string)

第二题效果如图 :

img

代码如下 :


def equation(x):
    return 2 * x ** 3 - 4 * x ** 2 + 3 * x - 6


def binary_search_root(left, right, error=1e-6):
    if equation(left) * equation(right) >= 0:
        return None

    while abs(right - left) > error:
        mid = (left + right) / 2
        if equation(mid) == 0:
            return mid
        elif equation(mid) * equation(left) < 0:
            right = mid
        else:
            left = mid

    return (left + right) / 2


# 示例用法
left = -10
right = 10
root = binary_search_root(left, right)

if root is None:
    print("在给定区间内找不到根。")
else:
    print(f"方程的根是:{root}")



第二题:
先看结果:

img


上代码:

#202361921:49:10
import collections
import matplotlib.pyplot as plt

s = input("Enter a string: ")

# 统计不同字符的个数,存储在字典中
char_dict = collections.Counter(s)

# 排序字典
char_dict = collections.OrderedDict(sorted(char_dict.items(), key=lambda t: t[1], reverse=True))

# 绘制条形图
plt.bar(range(len(char_dict)), list(char_dict.values()), align='center')
plt.xticks(range(len(char_dict)), list(char_dict.keys()))

# 添加x轴和y轴标签
plt.xlabel('Characters')
plt.ylabel('Occurrences')

# 展示条形图
plt.show()


第三题:
先看结果:

img

上代码:

#2023年6月19日21:59:36
def f(x):
    # 定义方程2X^3-4x^2+3x-6
    return 2*x**3 - 4*x**2 + 3*x - 6  

def bisect(a, b):
    # 检查区间是否有解
    if f(a) * f(b) >= 0:  
        print("No solution in the interval")
        return None

    # 循环直到区间足够小
    while abs(a - b) > 0.01:  
        # 计算中间点
        mid = (a + b) / 2  
        # 检查中间点是否是根
        if f(mid) == 0:  
            return mid
        # 根据f(a)和f(mid)的符号确定下一步搜索区间  
        elif f(a) * f(mid) < 0:  
            b = mid  # 根在a和mid之间,更新b
        else:  
            a = mid  # 根在mid和b之间,更新a
    # 返回近似根
    return (a + b) / 2  

# 给a和b赋初值,代表(-10, 10)区间
a = -10
b = 10
# 调用bisect函数在(-10, 10)内寻找根
root = bisect(a, b)  
print("The root is", root)

1.

s = 'hello world'
d = {}
for i in s:
    if i not in d:
        d[i] = 1
    else:
        d[i] += 1

# 按字符个数排序
d = sorted(d.items(), key=lambda x: x[1], reverse=True)

# 绘制条形图
import matplotlib.pyplot as plt
x = [i[0] for i in d]
y = [i[1] for i in d]
plt.bar(x, y)
plt.show()

img

2.用二分法求下面方程在(-10, 10) 之间的根。
二分法的思路是先找到区间的中间点,判断中间点是否为根或者根在左半边还是右半边,然后缩小区间,重复上述步骤,直到区间足够小或者找到根。

def f(x):
    return 2 * x**3 - 4 * x**2 + 3 * x - 6

def binary_search(root, left, right):
    while abs(left - right) > 1e-6:
        mid = (left + right) / 2
        if f(mid) == 0:
            return mid
        elif f(mid) * f(left) < 0:
            right = mid
        else:
            left = mid
    return (left + right) / 2

root = binary_search(0, -10, 10)
print(root)

img

顶栏正解,不错

1、循环遍历列表或字符串,如果不在则创建(key,value),如果字符在字典中则值加1
2、再用sorted函数排序

    import operator
 
    str = "abcabcabdddddb"
    dict = {}
    # 循环遍历列表或字符串,如果不在则创建(key,value),如果字符在字典中则值加1
    for i in str:
        if i not in dict:
            dict[i] = 1
        else:
            dict[i] += 1
    print(dict)
    d = sorted(dict.items(), key=operator.itemgetter(1), reverse=False)
    print("根value值升序排序:", d)

文心一言
2


import string
import collections
import matplotlib.pyplot as plt
def count_chars(string):
    char_counts = collections.defaultdict(int)
    for char in string:
        char_counts[char] += 1
    return char_counts
def sort_chars(char_counts):
    sorted_chars = sorted(char_counts.items(), key=lambda x: x[1], reverse=True)
    return sorted_chars
def plot_bars(sorted_chars, string):
    plt.barh(range(len(string)), [char[1] for char in sorted_chars], alpha=0.5)
    plt.yticks([char[0] for char in sorted_chars], [str(char[0]) for char in sorted_chars])
    plt.xlabel('Number of Occurrences')
    plt.title(f'Bar Chart of {string}')
    plt.show()
if __name__ == '__main__':
    string = 'Hello, World!'
    char_counts = count_chars(string)
    sorted_chars = sort_chars(char_counts)
    plot_bars(sorted_chars, string)

3

def bisection_method(f, a, b, tol=1e-6, max_iter=100):
    if f(a) * f(b) > 0:
        raise ValueError("区间选择不当,函数f(a)和f(b)同号")
    for i in range(max_iter):
        c = (a + b) / 2
        if abs(f(c)) < tol:
            return c
        elif f(a) * f(c) < 0:
            b = c
        else:
            a = c
    return (a + b) / 2

def f(x):
    return 2 * x ** 3 - 4 * x ** 2 + 3 * x - 6

a, b = -10, 10
root = bisection_method(f, a, b)
print(f"方程2X^3-4x^2+3x-6=0在(-10, 10)之间的根为{root:.6f}")


结果

方程2X^3-4x^2+3x-6=0在(-10, 10)之间的根为3.000000

针对问题2,实现统计字符串中字母出现的次数,并绘制柱状图的代码如下:

import matplotlib.pyplot as plt


strs = "you are a pig"
ditcs = {}

for s in set(strs[:]):
    if str(s).strip():
        ditcs[s] = strs.count(s)

print(ditcs)


#画图
labels = list(ditcs.keys())
values = list(ditcs.values())
index= range(len(labels))
plt.bar(index, values,tick_label=labels)
plt.show()

运行效果如下:

img

统计字符串中不同字符的个数并按字符个数排序,并绘制条形图。

import matplotlib.pyplot as plt

def count_unique_characters(string):
    char_count = {}
    for char in string:
        if char in char_count:
            char_count[char] += 1
        else:
            char_count[char] = 1
    return char_count

def plot_bar_chart(char_count):
    chars = list(char_count.keys())
    counts = list(char_count.values())
    
    plt.bar(chars, counts)
    plt.xlabel('Characters')
    plt.ylabel('Counts')
    plt.title('Unique Character Counts')
    plt.show()

# 测试样例
string = "Hello, World!"
char_count = count_unique_characters(string)
sorted_char_count = dict(sorted(char_count.items(), key=lambda x: x[1], reverse=True))
plot_bar_chart(sorted_char_count)


下面是代码的截图和运行结果示例:

{'l': 3, 'o': 2, 'H': 1, 'e': 1, ',': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1, '!': 1}


使用二分法求解方程2x^3 - 4x^2 + 3x - 6 = 0 的根。

def equation(x):
    return 2*x**3 - 4*x**2 + 3*x - 6

def binary_search_root(left, right, precision):
    while abs(right - left) > precision:
        mid = (left + right) / 2
        if equation(mid) == 0:
            return mid
        elif equation(mid) > 0:
            right = mid
        else:
            left = mid
    return (left + right) / 2

# 求解方程在 (-10, 10) 范围内的根,设置精度为 0.001
root = binary_search_root(-10, 10, 0.001)
print("Root:", root)


下面是代码的截图和运行结果示例:

Root: 2.498046875


用二分法求解方程Python代码

def f(x):
    return 2*x**3 - 4*x**2 + 3*x - 6

def bisection(a, b, error_tol=0.0001):
    if f(a) * f(b) >= 0:
        print("Error: f(a) and f(b) must have opposite signs!")
        return None
    else:
        while abs(b-a) > error_tol:
            c = (a+b)/2
            if f(c) == 0:
                return c
            elif f(c) * f(a) < 0:
                b = c
            else:
                a = c
        return (a+b)/2

root = bisection(-10, 10)
print("Root: ", round(root, 4))