鱼C论坛

 找回密码
 立即注册
查看: 1466|回复: 15

[已解决]照着小甲鱼打的,为啥还有问题

[复制链接]
发表于 2020-7-21 20:28:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import time as t

class MyTimer():
    def __init__(self):
        self.unit=['year','month','day','hours','minute','sec']
        self.prompt='wei kaishi jishi '
        self.lasted=[]
        self.begin=0
        self.end=0

    def __str__(self):
        return self.prompt

    __repr__=__str__

   
    def start(self):
        self.begin = t.localtime()
        self.prompt='pleasd stop!'
        print("jishikaishi")

    def stop(self):
        if not self.begin:
            print('please start')
        else:
            self.end= t.localtime()
            self._calc()
            print("jishijieshu")

    def _calc(self):
        self.lasted=[]
        self.prompt='zonggongyunxingle'
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[i]:   
                self.prompt+=(str(self.lasted[index])+self.unit[index])


            self.begin=0
            self.end=0

运行结果:
>>> a=MyTimer()
>>> a.start()
jishikaishi
>>> a.stop()
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a.stop()
  File "D:\PYthon\练习\计时.py", line 28, in stop
    self._calc()
  File "D:\PYthon\练习\计时.py", line 36, in _calc
    if self.lasted[i]:
NameError: name 'i' is not defined
最佳答案
2020-7-21 20:49:26



嗯 你第一个错误上面说了哈 就是,index 打成了 i ,第二个错误就是 self.begin=0 和 self.end=0

写在了 for 循环内,导致一次循环就把原先的 begin 和 end 的值赋值为了 int 整型,而下次用列表索引时候就会报错

把 self.begin=0 和 self.end=0 移动到 for 循环外即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-21 20:34:41 | 显示全部楼层


这样试试看:
import time as t


class MyTimer():
    def __init__(self):
        self.unit = ['year', 'month', 'day', 'hours', 'minute', 'sec']
        self.prompt = 'wei kaishi jishi '
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __str__(self):
        return self.prompt

    __repr__ = __str__

    def start(self):
        self.begin = t.localtime()
        self.prompt = 'pleasd stop!'
        print("jishikaishi")

    def stop(self):
        if not self.begin:
            print('please start')
        else:
            self.end = t.localtime()
            self._calc()
            print("jishijieshu")

    def _calc(self):
        self.lasted = []
        self.prompt = 'zonggongyunxingle'
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt += (str(self.lasted[index]) + self.unit[index])

            self.begin = 0
            self.end = 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:36:45 | 显示全部楼层
if self.lasted[i]:

是index,不是i
import time as t

class MyTimer():
    def __init__(self):
        self.unit=['year','month','day','hours','minute','sec']
        self.prompt='wei kaishi jishi '
        self.lasted=[]
        self.begin=0
        self.end=0

    def __str__(self):
        return self.prompt

    __repr__=__str__

   
    def start(self):
        self.begin = t.localtime()
        self.prompt='pleasd stop!'
        print("jishikaishi")

    def stop(self):
        if not self.begin:
            print('please start')
        else:
            self.end= t.localtime()
            self._calc()
            print("jishijieshu")

    def _calc(self):
        self.lasted=[]
        self.prompt='zonggongyunxingle'
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:   
                self.prompt+=(str(self.lasted[index])+self.unit[index])


            self.begin=0
            self.end=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 20:36:45 | 显示全部楼层

还是不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 20:39:09 | 显示全部楼层

改了还是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 20:44:32 | 显示全部楼层

为啥我改成index还是一样的错误,你能运行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:45:04 | 显示全部楼层



这样就好了:
import time as t


class MyTimer():
    def __init__(self):
        self.unit = ['year', 'month', 'day', 'hours', 'minute', 'sec']
        self.prompt = 'wei kaishi jishi '
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __str__(self):
        return self.prompt

    __repr__ = __str__

    def start(self):
        self.begin = t.localtime()
        self.prompt = 'pleasd stop!'
        print("jishikaishi")

    def stop(self):
        if not self.begin:
            print('please start')
        else:
            self.end = t.localtime()
            self._calc()
            print("jishijieshu")

    def _calc(self):
        self.lasted = []
        self.prompt = 'zonggongyunxingle'
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt += (str(self.lasted[index]) + self.unit[index])

        self.begin = 0
        self.end = 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-21 20:46:24 | 显示全部楼层

重写__add__漏了
再试试
import time as t

class MyTimer():
    def __init__(self):
        self.unit=['year','month','day','hours','minute','sec']
        self.prompt='wei kaishi jishi '
        self.lasted=[]
        self.begin=0
        self.end=0

    def __add__(self,other):
        prompt = 'zong gong yun xing le'
        result = []
        for index in range(6):
            result.append(self.lasted[index] + other.lasted[index])
            if result[index]:
                tish += str(result[index]) + self.unit[index]

    def __str__(self):
        return self.prompt

    __repr__=__str__


    def start(self):
        self.begin = t.localtime()
        self.prompt='pleasd stop!'
        print("jishikaishi")

    def stop(self):
        if not self.begin:
            print('please start')
        else:
            self.end= t.localtime()
            self._calc()
            print("jishijieshu")

    def _calc(self):
        self.lasted=[]
        self.prompt='zonggongyunxingle'
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt+=(str(self.lasted[index])+self.unit[index])


            self.begin=0
            self.end=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 20:47:06 | 显示全部楼层

确实可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:47:21 | 显示全部楼层
#求助,为什么小甲鱼这个代码无法保存和运行
#密码安全性检查  check.py
password = input("请输入需要检查的密码组合:")
lenght = len(password)
symbols = r'''~!@#$%^&*_=-/,.?<>;:[]{}|\()'''
alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
numbers = "0123456789"
temp1 = '''高级密码要求:
    1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
    2. 密码只能由字母开头
    3. 密码长度不能低于16位
            '''
temp2 = '''\t您的密码安全级别评定为:'''
temp3 ="请继续保持"
require = '''\t低级密码要求:由单纯的数字或字母组成,长度小于等于8位;
    中级密码要求:由数字、字母或特殊字符任意两种组合,密码长度不能低于8位
    高级密码要求:由数字、字母及特殊字符三种组合,密码只能由字母开头,密码长度不能低于16位
        '''
i=0
#检查password中组成元素:
while 1:
    for each in password:
        if each in symbols:
            i +=1
            break
    for each in password:
        if each in alphabet:
            i +=1
            break
    for each in password:
        if each in numbers:
            i +=1
            break

    def low_password( ):
             result = temp2 +"低"
             print(result)
             print(temp1)
    def mid_password( ):
            result = temp2 +"中"
            print(result)
            print(temp1)
    def high_password( ):
            result = temp2 +"高"
            print(result)
            print(temp3)
    while (password.isspace() or  lenght == 0):
        password =input( "\t密码输入错误,原因:空格或未输入。\n\t重新输入要检查的密码组合:")
        lenght = len(password)
        break

    while (i !=1  and lenght <= 8 ) :
        password =input( "\t密码输入不符合要求。"+"\n\t密码要求:\n"+require+"\n\t重新输入要检查的密码组合:")
        lenght = len(password)
        break
    while  (i ==1 and lenght >8):
        password =input( "\t密码输入不符合要求。"+"\n密码要求:\n"+require+"\n\t重新输入要检查的密码组合:")
        lenght = len(password)
        break
    if lenght <=8 and i ==1:
            low_password()
            break
    elif i==3 and lenght > 16 and password[0] in alphabet:
            high_password()
            break
    else:
            mid_password()
            break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:48:48 | 显示全部楼层
luoxy 发表于 2020-7-21 20:47
#求助,为什么小甲鱼这个代码无法保存和运行
#密码安全性检查  check.py
password = input("请输入需要检 ...

大哥不会自己发求助帖子吗
被审核了就等等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:49:26 | 显示全部楼层    本楼为最佳答案   



嗯 你第一个错误上面说了哈 就是,index 打成了 i ,第二个错误就是 self.begin=0 和 self.end=0

写在了 for 循环内,导致一次循环就把原先的 begin 和 end 的值赋值为了 int 整型,而下次用列表索引时候就会报错

把 self.begin=0 和 self.end=0 移动到 for 循环外即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-7-21 20:50:07 | 显示全部楼层

我咋没看出改了哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:51:13 | 显示全部楼层
Hant 发表于 2020-7-21 20:50
我咋没看出改了哪里

最后两句删减了一个缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 20:52:25 | 显示全部楼层
Twilight6 发表于 2020-7-21 20:49
嗯 你第一个错误上面说了哈 就是,index 打成了 i ,第二个错误就是 self.begin=0 和 self.end=0

...

懂了,感谢大佬!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 20:54:08 | 显示全部楼层
Hant 发表于 2020-7-21 20:52
懂了,感谢大佬!!!

客气了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 20:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表