pythonfractions
A. python九九乘法表是什么
首先,你的语法是 Python3 的语法,但是用的是 Python2;
其实,类似这种题目,借助格式化输出会更加方便,看代码:
# -*- encoding: gbk -*-
for row in range(1, 10):
for col in range(1, row + 1):
prod = row * col
print '%d * %d = %-2d ' % (col, row, prod),
Python定义
求余运行a % b的值处于开区间[0, b)内,如果b是负数,开区间变为(b, 0]。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程式:b * (a // b) + a % b = a恒真,整除运行需要向负无穷小方向取值。比如7 // 3的结果是2,而(-7) // 3的结果却是-3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。
以上内容参考:网络-Python
B. python中e的N次方怎么表示
import mathmath.e**N或import numpy as npnp.e**N。
C. 使用Python实时将gps返回的经纬度转化为图片
主要就是做了两件事情:
1.生成一张有文本信息的JPG图片
2.写入EXIF信息
生成照片需要PIL和libjpeg
import Imageimport ImageDrawimport ImageFontdef create_pic(path, text=[], type='jpeg'):
img = Image.new("RGB", (2448, 3264), '#37b6ce')#颜色和大小
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('ziti.ttf', 120)#ttf是字体,120是字号
for h in range(0, len(text)):#多行文本
draw.text((256, 256 + 120 * h), text[h], font=font)
img.save(path, type)#保存
# img.show()
读写EXIF信息需要pyexiv2,获取google的经纬度需要geopy
顺便说下经纬度的表示:
一般exif里看到的都是这样的57°55'56.6",是度,分,秒这么展示的,google上获取来的是十进制的57.9323888888888
所以需要转换一下再写进去
公式:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888
etemplate=pyexiv2.ImageMetadata('IMG_4408.JPG')template.read()#exif信息很多,所以找个真正手机拍摄的照片当模版googlev3=geopy.GoogleV3()place,gps=googlev3.geocode(location)#获取gps信息,location写地名,比如‘北京王府井’,偶尔会被墙,最好挂个代理defset_exif(path,date_time=None,gps=()):
"""
datetime=2014:10:0412:41:38
geo=(lat=39.12315,lng=115.12231)
"""
metadata=pyexiv2.ImageMetadata(path)
metadata.read()
forkintemplate.exif_keys:
metadata[k]=pyexiv2.ExifTag(k,template[k].value)
ifnotdate_time:
date_str=pyexiv2.utils.exif(date_time)
metadata['Exif.Photo.DateTimeOriginal']=date_str
metadata['Exif.Photo.DateTimeDigitized']=date_str
metadata['Exif.Image.DateTime']=date_str
iflen(geo)>0:
c_lat=decimal2coordinate(geo[0],['S','N'])
c_lng=decimal2coordinate(geo[1],['W','E'])
metadata["Exif.GPSInfo.GPSLatitude"]=coordinate2rational(c_lat[0],c_lat[1],c_lat[2])
metadata["Exif.GPSInfo.GPSLatitudeRef"]=c_lat[3]
metadata["Exif.GPSInfo.GPSLongitude"]=coordinate2rational(c_lng[0],c_lng[1],c_lng[2])
metadata["Exif.GPSInfo.GPSLongitudeRef"]=c_lng[3]
else:
metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitude")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitudeRef")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitude")
metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitudeRef")
metadata.write()defdecimal2coordinate(value,loc):
"""
loc=lat=>["S","N"],lng=>["W","E"]
retrunD,M,S,locate
"""
ifvalue<0:
loc_value=loc[0]
elifvalue>0:
loc_value=loc[1]
else:
loc_value=""
abs_value=abs(value)
deg=int(abs_value)
t1=(abs_value-deg)*60
min=int(t1)
sec=round((t1-min)*60,5)
return(deg,min,sec,loc_value)defcoordinate2rational(D,M,S):
return(fractions.Fraction(D,1),fractions.Fraction(int((M+S/60)*100),100),fractions.Fraction(0,1))
D. python怎么导出fractions函数的分子
python的fractions可以助你一臂之力:
#coding=utf-8
fromfractionsimportFraction
numerator=2#分子
denominator=6#分母
print(Fraction(numerator,denominator)+1)
输出结果:
4/3
E. python中如何翻译from fractions import fraction,用编程的的意思翻译,不是按英文的意思翻译
就是吧fractions.fraction 这个模块导入进来呗。
F. python中denominator是什么方法
denominator是fractions模块的Fraction类的实例的属性,不是方法
from fractions import Fraction
a = Fraction(1,2)
a.numerator # 分子
a.denominator # 分母
G. Python中的Fraction分数问题
兄弟,八分之十不就等于四分之五吗
H. python中如何实现float(3/5)=0.6
3和5 都是整数类型,3/5得出的结果也必定是整数,不会出现小数。所以有除不尽的,只会显示商,而不显示余数。求余是3 % 5 得出3,还是不能被整除。
可以转化成float浮点数在进行除法运算。
float(3) / float(5)
0.6
I. Python基本内置数据类型有哪些
内置类型是指任何语言在设计初期定义的类型,如C语言中的int、double、char等。它也是在一种语言中最基本的类型,与编译器编译出的代码具有重大关系。值得一提的是,不同语言也拥有不同的内置类型, 但是所有内置类型的定义都与计算机的运算方式相关。
Python主要内置类型包括数值、序列、映射、类、实例和异常等。
数值类型:全局中只有一个(Python在解释器启动的时候,Python会用None类型生成一个None的对象),包括int类型、float类型、complex类型、bool类型。
迭代类型:在Python中,迭代类型可以使用循环来进行遍历。
序列类型:list(是可变序列,通常用于存放同类项目的集合)、tuple(是不可变序列,通常用于储存异构数据的多项集)、str(在Python中处理文本数据是使用str对象,也称为字符串。字符串是由Unicode码位构成的不可变序列。)、array、range(表示不可变的数字序列,通常用于在for循环中循环指定的次数)、bytes(由单个字节构成的不可变序列)、bytearray(bytes对象的可变对应物)、memoryvie(二进制序列)
映射类型:映射对象将具有hash的值映射到任意对象。映射是可变的对象。目前只有一种标准映射,即dictionary。字典的键几乎是任意值,也就是说,包含列表、字典或其他可变类型的值。
集合类型:作为一种无序的多项集,集合并不记录元素位置或插入顺序。相应地,集合不支持索引、切片或其他序列类的操作。目前Python有两种内置集合类型:set和frozenset。
set类型是可变的,其内容可以使用add()和remove()这样的方法来改变。由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。
frozenset类型是不可变并且具有哈希值,其内容在被创建后不能再改变,因此它可以被用作字典的键或其他集合的元素。
上下文管理类型:with语句
其他类型:模块、class、实例、函数、方法、代码、object对象、type对象、ellipsis(省略号)、notimplemented
J. 求助python多线程,执行到100多个停止了
python 线程 暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. 但暂停和恢复线程就有点难了, 我一直也不清除有什么好的方法, 直到我看到threading中Event对象的wait方法的描述时.
wait([timeout])
Block until the internal flag is true. If the internal flag is true on entry, return immediately. Otherwise, block until another thread calls set() to set the flag to true, or until the optional timeout occurs.
阻塞, 直到内部的标志位为True时. 如果在内部的标志位在进入时为True时, 立即返回. 否则, 阻塞直到其他线程调用set()方法将标准位设为True, 或者到达了可选的timeout时间.
When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof).
This method returns the internal flag on exit, so it will always return True except if a timeout is given and the operation times out.
当给定了timeout参数且不为None, 它应该是一个浮点数,以秒为单位指定操作的超时(或是分数)。
此方法在退出时返回内部标志,因此除非给定了超时且操作超时,否则它将始终返回True。
Changed in version 2.7: Previously, the method always returned None.
2.7版本以前, 这个方法总会返回None.
<br>
利用wait的阻塞机制, 就能够实现暂停和恢复了, 再配合循环判断标识位, 就能实现退出了, 下面是代码示例:
#!/usr/bin/env python
# coding: utf-8
import threading
import time
class Job(threading.Thread):
def __init__(self, *args, **kwargs):
super(Job, self).__init__(*args, **kwargs)
self.__flag = threading.Event() # 用于暂停线程的标识
self.__flag.set() # 设置为True
self.__running = threading.Event() # 用于停止线程的标识
self.__running.set() # 将running设置为True
def run(self):
while self.__running.isSet():
self.__flag.wait() # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回
print time.time()
time.sleep(1)
def pause(self):
self.__flag.clear() # 设置为False, 让线程阻塞
def resume(self):
self.__flag.set() # 设置为True, 让线程停止阻塞
def stop(self):
self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话
self.__running.clear() # 设置为False
下面是测试代码:
a = Job()
a.start()
time.sleep(3)
a.pause()
time.sleep(3)
a.resume()
time.sleep(3)
a.pause()
time.sleep(2)
a.stop()
<br>
测试的结果:
这完成了暂停, 恢复和停止的功能. 但是这里有一个缺点: 无论是暂停还是停止, 都不是瞬时的, 必须等待run函数内部的运行到达标志位判断时才有效. 也就是说操作会滞后一次.
但是这有时也不一定是坏事. 如果run函数中涉及了文件操作或数据库操作等, 完整地运行一次后再退出, 反而能够执行剩余的资源释放操作的代码(例如各种close). 不会出现程序的文件操作符超出上限, 数据库连接未释放等尴尬的情况.