如何计算圆周率前314159位数字之和?代码运行异常求助
问题分析与修复方案
问题根源
你的代码计数器到51198后停止累加,核心原因是默认requests.get请求的User-Agent被目标网站识别为爬虫,导致返回的页面内容不完整,只包含了前5万多位圆周率数字。
修复方案
给请求添加模拟浏览器的User-Agent请求头,让网站返回完整页面。同时优化代码细节,避免使用内置函数名作为变量名,调整终止条件更贴合需求。
修正后的代码
import requests from bs4 import BeautifulSoup total = 0 counter = 0 # 模拟浏览器请求头,避免被识别为爬虫 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } req = requests.get("https://www.piday.org/million/", headers=headers) soup = BeautifulSoup(req.content, "html.parser") pi_text = soup.find(id="million_pi").get_text() # 计算前314159位数字的总和 for digit in pi_text: if digit.isdigit(): total += int(digit) counter += 1 # 达到目标位数立即终止循环 if counter >= 314159: break print(total)
额外优化说明
- 替换
sum为total:sum是Python内置函数,用它做变量名会覆盖内置功能,可能引发意外问题。 - 调整终止条件:原代码
counter>314160会多计算一位,改为counter>=314159更准确匹配你的目标。
内容的提问来源于stack exchange,提问作者Adithya Prasad
相关产品推荐
相关产品推荐

