大神看看结果对不上问题
谁能帮我看看这个课后作业44讲的,求时间差的问题,为什么我这个在向高位借位时,结果不对?import time
class Ti:
def __init__(self):
self.pp = '请先调用开始时间!'
self.st = 0
self.sp = 0
self.tt = []
self.dw = ['年','月','日','时','分','秒']
def __str__(self):
return self.pp
__repr__ = __str__
def start(self):
self.st = time.localtime()
print('计时开始。。。')
for each in range(6):
print(str(self.st)+self.dw,end='')
def stop(self):
self.sp = time.localtime()
print('计时结束!')
for each in range(6):
print(str(self.sp)+self.dw,end='')
print(' ')
self._cal()
def __add__(self,other):
num = []
pp = '两个对象总共用时:'
for each in range(6):
num.append(self.tt+other.tt)
if num:
pp += str(num)+str(self.dw)
return pp
def _cal(self):
self.pp = '总共用时:'
move = ['0','12','31','24','60','60']
for each in range(6):
self.tt.append(self.sp - self.st)
def pd(x):
if self.tt < 0:
self.tt += int(move)
self.tt -= 1
x -= 1
pd(x)
else:
return self.tt
pd(int(each))
self.pp += str(self.tt)+self.dw
print(self.pp)
self.st = 0
self.sp = 0
def __str__(self):
return self.pp
__repr__ = __str__
return下面的代码不执行了,可以删了吧
def _cal(self):
self.pp = '总共用时:'
move = ['0', '12', '31', '24', '60', '60']
def pd(x):
if self.tt < 0:
self.tt += int(move)
self.tt -= 1
x -= 1
pd(x)
else:
return self.tt
for each in range(6):
self.tt.append(self.sp - self.st)
pd(int(each))
self.pp += str(self.tt) + self.dw
print(self.pp)
self.st = 0
self.sp = 0
这个里面又定义了一个函数,应该这样放才对吧,或者干脆再放外一层
a=Ti()
a.start()
time.sleep(65)
a.stop()
运行了一下
计时开始。。。
2020年9月12日19时31分0秒计时结束!
2020年9月12日19时32分5秒
总共用时:0年0月0日0时1分5秒
没什么问题啊,你的问题是什么?
计算时间差,用datetime函数就能很简单的实现了 本帖最后由 sunrise085 于 2020-9-12 19:47 编辑
程序的问题帮你指出来并修改了,修改之处写了注释
import time
class Ti:
def __init__(self):
self.pp = '请先调用开始时间!'
self.st = 0
self.sp = 0
self.tt = []
self.dw = ['年','月','日','时','分','秒']
def __str__(self):
return self.pp
__repr__ = __str__
def start(self):
self.st = time.localtime()
print('计时开始。。。')
for each in range(6):
print(str(self.st)+self.dw,end='')
def stop(self):
self.sp = time.localtime()
print('计时结束!')
for each in range(6):
print(str(self.sp)+self.dw,end='')
print(' ')
self._cal()
def __add__(self,other):
num = []
pp = '两个对象总共用时:'
for each in range(6):
num.append(self.tt+other.tt)
if num:
pp += str(num)+str(self.dw)
return pp
def _cal(self):
self.pp = '总共用时:'
move = ['0','12','31','24','60','60']
for each in range(6):
self.tt.append(self.sp - self.st)
def pd(x):
if self.tt < 0:
self.tt += int(move)
self.tt -= 1
x -= 1
pd(x)
#下面这两行没用,删掉即可,另外这个函数pd最好不要放在for循环中,向前提几行,放在for循环外就挺好
'''else:
return self.tt'''
pd(int(each))
#你在下面这一行已经把当前一位的结果添加到字符串pp中了,后一位来借位后,你并没有修改字符串中相应的内容
#self.pp += str(self.tt)+self.dw
#所以字符串pp应该另写一个for循环,这样才能保证写进字符串的是借位之后的结果
for each in range(6):
self.pp += str(self.tt)+self.dw
print(self.pp)
self.st = 0
self.sp = 0
sunrise085 发表于 2020-9-12 19:44
程序的问题帮你指出来并修改了,修改之处写了注释
哇,大佬,谢谢谢谢,醍醐灌顶{:5_109:},for里面放函数,我当时想着出现负数判断,现在退出来想,反正是出现负的矫正的,根本不用在循环里面直接把结果矫正就可以了,但是大神for里面再定义一个函数会有什么劣势?请指教,谢谢! 嘟嘟酱君 发表于 2020-9-12 19:58
哇,大佬,谢谢谢谢,醍醐灌顶,for里面放函数,我当时想着出现负数判断,现在退出来想,反正是 ...
浪费时间,每次for循环都会定义一次函数。 疾风怪盗 发表于 2020-9-12 19:34
return下面的代码不执行了,可以删了吧
哇,谢谢,我刚学,不知道这个函数,知道的知识太少了,课后作业基本都是按照知道那点东西来做的,而且,这个类里面知识点好多,蜂拥而至,短时间有些消化不了还是要多多学习。 sunrise085 发表于 2020-9-12 20:02
浪费时间,每次for循环都会定义一次函数。
对啊,谢谢大神,还想问一下,函数里什么值需要return?为什么有的函数里面不需要返回外面也可以用,有的就要返回? 嘟嘟酱君 发表于 2020-9-12 20:31
对啊,谢谢大神,还想问一下,函数里什么值需要return?为什么有的函数里面不需要返回外面也可以用,有的 ...
需要返回值的时候就返回,不需要的时候就不返回呗
当一个函数只是进行一系列操作的时候就不需要返回值;当一个函数是需要得到莫以特定的结果的时候就需要返回值
看下面这个小例子
def show(string):#这个函数只是打印string的内容,所以不需要返回值
print(string)
def add_str(string1,string2): # 这个函数要将梁国字符串拼接成为新字符串,所以需要返回值将新字符串返回调用的位置
string3=string1+string2
return string3
str1="I Love "
str2="FishC"
str3=add_str(str1,str2)
show(str3)
你的这个函数pd不需要返回值,你看看调用pd函数的那一行,有奖pd赋值给某一变量吗?没有吧。所以你的这个pd函数只是进行一些列操作,并不是想得到一个结果 sunrise085 发表于 2020-9-12 20:41
需要返回值的时候就返回,不需要的时候就不返回呗
当一个函数只是进行一系列操作的时候就不需要返回值 ...
那这个程序,如果我用小甲鱼和小鱼的对象属性的xy值来判断小鱼是否被甲鱼吃掉,是不是在类方法中就不需要返回xy的坐标值了?甲鱼的能量值也是直接用的属性,并没有返回值
import random as r
legal_x =
legal_y =
class Turtle:
def __init__(self):
# 初始体力
self.power = 100
# 初始位置随机
self.x = r.randint(legal_x, legal_x)
self.y = r.randint(legal_y, legal_y)
def move(self):
# 随机计算方向并移动到新的位置(x, y)
new_x = self.x + r.choice()
new_y = self.y + r.choice()
# 检查移动后是否超出场景x轴边界
if new_x < legal_x:
self.x = legal_x - (new_x - legal_x)
elif new_x > legal_x:
self.x = legal_x - (new_x - legal_x)
else:
self.x = new_x
# 检查移动后是否超出场景y轴边界
if new_y < legal_y:
self.y = legal_y - (new_y - legal_y)
elif new_y > legal_y:
self.y = legal_y - (new_y - legal_y)
else:
self.y = new_y
# 体力消耗
self.power -= 1
# 返回移动后的新位置
return (self.x, self.y)
def eat(self):
self.power += 20
if self.power > 100:
self.power = 100
class Fish:
def __init__(self):
self.x = r.randint(legal_x, legal_x)
self.y = r.randint(legal_y, legal_y)
def move(self):
# 随机计算方向并移动到新的位置(x, y)
new_x = self.x + r.choice()
new_y = self.y + r.choice()
# 检查移动后是否超出场景x轴边界
if new_x < legal_x:
self.x = legal_x - (new_x - legal_x)
elif new_x > legal_x:
self.x = legal_x - (new_x - legal_x)
else:
self.x = new_x
# 检查移动后是否超出场景y轴边界
if new_y < legal_y:
self.y = legal_y - (new_y - legal_y)
elif new_y > legal_y:
self.y = legal_y - (new_y - legal_y)
else:
self.y = new_y
# 返回移动后的新位置
return (self.x, self.y)
turtle = Turtle()
fish = []
for i in range(10):
new_fish = Fish()
fish.append(new_fish)
while True:
if not len(fish):
print("鱼儿都吃完了,游戏结束!")
break
if not turtle.power:
print("乌龟体力耗尽,挂掉了!")
break
pos = turtle.move()
# 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
# 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
for each_fish in fish[:]:
if each_fish.move() == pos:
# 鱼儿被吃掉了
turtle.eat()
fish.remove(each_fish)
print("有一条鱼儿被吃掉了...")
嘟嘟酱君 发表于 2020-9-12 20:31
对啊,谢谢大神,还想问一下,函数里什么值需要return?为什么有的函数里面不需要返回外面也可以用,有的 ...
return 是需要将函数里面的一个 元素 或者 值 反出时才用的,如果要用return ,必须要一个变量来接收
页:
[1]