看下这个问题,Python的计算器程序,需要哪些判断,希望可以给一点思路
import math
def add(x, y):
"""加法"""
return x + y
def subtract(x, y):
"""减法"""
return x - y
def multiply(x, y):
"""乘法"""
return x * y
def divide(x, y):
"""除法"""
if y == 0:
raise ValueError("除数不能为0!")
return x / y
def modulus(x, y):
"""取模"""
return x % y
def power(x, y):
"""幂运算"""
return math.pow(x, y)
print("请选择操作:")
print("1. 加")
print("2. 减")
print("3. 乘")
print("4. 除")
print("5. 取模")
print("6. 幂运算")
while True:
# 获取用户输入
choice = input("输入操作编号(1/2/3/4/5/6):")
# 检查用户输入
if choice in ('1', '2', '3', '4', '5', '6'):
num1 = float(input("输入第一个数字:"))
num2 = float(input("输入第二个数字:"))
if choice == '1':
print(num1, "+", num2, "=", add(num1, num2))
elif choice == '2':
print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == '3':
print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == '4':
try:
print(num1, "/", num2, "=", divide(num1, num2))
except ValueError as e:
print(e)
elif choice == '5':
print(num1, "%", num2, "=", modulus(num1, num2))
elif choice == '6':
print(num1, "^", num2, "=", power(num1, num2))
break
else:
print("输入有误,请输入正确的操作编号!")
大部分的数据都是直接写在静态文件上的,静态文件这里通常指的一定时间内不会变化的,不需要与后台进行交互的网页。
1.首先确认抓取的数据是否存在于响应文件中
2.分析页面结构,观察URL地址规律
1)查看网页元素的布局,整体结构预览,常用控制台来分析
2)查看在浏览网页(比如翻页)时元素结构是否发生变化
3)查看页面跳转时URL地址是否变化(判断是否发生请求转发或重定向),如果有则去JS代码中找变化的原因
3.开始编写代码进行数据抓取
4.开始写自己的第一个爬虫程序
Python爬虫入门,最简单的爬虫代码,网站如何判断是人为的操作还是爬虫程序的操作,为url参数中的中文参数进行编码,基于百度搜索的爬虫程序
做完上面的案例后,可以再做一个案例练练手。Python爬虫小程序,爬取百度贴吧网页文件,新手练手的好案例
5.多级页面爬取思路
上面两个案例都是爬取一级页面的,一级页面指的是打开某个网页,仅仅对该网页上的内容做数据爬取,而二级页面就是在一级页面的基础上,你点击一个内容,这个内容往往是一个连接,它带你来到了另一个页面,这就是二级页面。在做爬虫时一般是先下载一级页面,这个页面没有我们要爬的数据,但是它包含了存储我们要的数据的网站的链接,收集所有链接后,我们拥有了所有的二级页面,也就拥有了所有数据,这时候你再到二级页面去爬数据即可。有二级页面也有三级页面四级页面,但是原理都是一样的。
我们再来看看如何爬取二级页面的内容
Python爬虫,4567电影网电影信息爬取,二级页面处理方案
这一部分的数据不是存在响应内容中,而是存在Ajax的XML文件或者JS文件中,而且它随着你的操作而动态变化。
1.如果发现想要的内容不再响应文件中,大可能性是使用Ajax动态生成的
2.F12进入控制台抓包,刷新页面或执行某些行为,查看XHR异步加载的数据包内容
1)GET请求:查看Request Headers请求头,查看请求头是如何做的,是否需要伪装请求头。
查看Query String Paramters,查看请求参数,这些参数多包含在URL中
2)Post请求:查看Request Headers请求头,查看请求头是如何做的,是否需要伪装请求头。
查看FormData表单数据,看post发送请求时封装了哪些数据,这些数据哪些是动态的哪些是静态的,动态再进一步分析如何生成(主要通过分析JS代码)
3.观察查询参数或者Form表单数据规律,如果需要进行进一步抓包分析处理,应当去分析JS文件
4.使用request.get().json()获取json数据,利用列表或字典的方法提取数据
1.将待爬取的URL放入队列中
需要使用到的模块有:from queue import Queue
2.多个线程从队列中取出地址,调用requests模块获取文件
需要用到的模块有:from threading import Thread
3.在进行I/O读写的时候注意加锁
需要用到的模块有:from threading import Lock
4.调取队列url地址的两种写法
当队列值为空时,线程再去做请求会陷入阻塞,所以要为队列做判空操作或者加抛异常
方式一:判断队列是否为空,避免线程堵塞
while True:
if not q.empty():
url=q.get()
else:
break
方式二:超时抛异常
try:
url=q.get(block=True,timeout=5)
....
except Exception as e:
break
5.多线程争抢共同文件时的操作
多线程写入文件时不加线程锁会导致一系列问题
方法如下:
from threading import Lock
lock=Lock()
lock.acquire() #加锁
代码块
local.relase() #释放
案例:
Python多线程爬虫,腾讯招聘网职位爬取程序,Ajax异步数据爬取模板
此内容会在将来补上..
pythoy一般用于解析页面的模块用re、lxml+xpath、json,以下是用法
1.re
re通过正则表达式来获取想要得到的内容,核心在于如何编写正则表达式
python正则表达式re模块入门,贪婪匹配和非贪婪匹配,案例:猫眼电影TOP100信息提取
2.lxml+xpath
lxml+xpath是通过编写xpath,然后使用lxml来解析xpath进行匹配,需要知道xpath的规则(教程):
Python常用插件类举,lxml+Xpath实现爬虫,使用Xpath爬取链家二手房源信息
3.ajax/json
json一般是ajax动态数据,请求得到ajax响应内容后,将它json化,再进一步处理,如存库,存缓存
Python多线程爬虫,腾讯招聘网职位爬取程序,Ajax异步数据爬取模板
4.pyexecjs
问题描述:我正在开发一款Python计算器程序,并且需要评估需要加入哪些错误处理和输入验证功能,以确保程序的可靠性和安全性。请为我提供一些思路和指引,例如需要注意的数据类型、语法问题、用户交互等。
解决方案: 1. 错误处理:需要对程序中可能出现的错误进行处理,例如字符串转换时出现错误、除数为0等等。可以使用try-except语句来捕获可能出现的异常,并给出相应的处理方法。 具体代码参考:
try:
a = int(input("请输入一个整数:"))
b = int(input("请再输入一个整数:"))
result = a / b
print("计算结果为:", result)
except ValueError:
print("您输入的不是整数,请重新输入!")
except ZeroDivisionError:
print("除数不能为0,请重新输入!")
except Exception as e:
print("程序发生异常,错误信息为:", e)
def valid_num(num):
try:
float(num)
except ValueError:
return False
return True
def valid_operation(operation):
operations = ["+", "-", "*", "/"]
if operation in operations:
return True
return False
def input_num:
num = input("请输入数字:")
while not valid_num(num):
num = input("请输入数字格式不正确,请重新输入:")
def input_operation:
operation = input("请输入运算符:")
while not valid_operation(operation):
operation = input("请输入运算符格式不正确,请重新输入:")
a = int(input("请输入一个整数:"))
b = float(input("请再输入一个浮点数:"))
result = a + b
print("计算结果为:", result)
def valid_num(num):
try:
float(num)
except ValueError:
return False
return True
def valid_operation(operation):
operations = ["+", "-", "*", "/"]
if operation in operations:
return True
return False
def input_num:
num = input("请输入数字:")
while not valid_num(num):
num = input("请输入数字格式不正确,请重新输入:")
return float(num)
def input_operation:
operation = input("请输入运算符:")
while not valid_operation(operation):
operation = input("请输入运算符格式不正确,请重新输入:")
return operation
if __name__ == '__main__':
a = input_num()
operation = input_operation()
b = input_num()
if operation == "+":
result = a + b
elif operation == "-":
result = a - b
elif operation == "*":
result = a * b
elif operation == "/":
result = a / b
print(f"计算结果为: {result}")
这些是我能想到的一些优化方案,希望对你有帮助。当然,具体实现还需要根据你的代码和需求进行调整。