TsaiYen 发表于 2020-6-10 22:39:24

文件檔案

亲爱的鱼友可以帮我看看这题的问题吗{:5_100:} ,
1. 我想要在档案文件中读取,在终端输入的帐号名称有没有跟档案文件的帐号名称一样,有的话显示此用户名称已被使用
2.我发现我的代码只能读取一行
def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            while True:
                asteram.seek(0)
                answer = asteram.readline()   
                if register_aacount not in answer:
                  input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
                  asteram.write(input_user)
                  print("註冊成功")
                  break
                else:
                  print("此帳號已被使用")   
                  break   
    else:
      print("密碼錯誤")
registered()

Twilight6 发表于 2020-6-10 22:45:26


因为你使用的是 readline 每次只读取一行,而且你每次循环都重新把指针移动到开始了呀

导致每次读完一行 然后下一次循环开始被你移动回文件开头 又重新读了这一行

去掉应该就能正常运行了:
def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            while True:
                answer = asteram.readline()
                if register_aacount not in answer:
                  input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
                  asteram.write(input_user)
                  print("註冊成功")
                  break
                else:
                  print("此帳號已被使用")
                  break
    else:
      print("密碼錯誤")
registered()

TsaiYen 发表于 2020-6-10 23:00:03

不行欸qq

Twilight6 发表于 2020-6-10 23:05:27

TsaiYen 发表于 2020-6-10 23:00
不行欸qq

你把你部分测试的txt文件内容复制上来 我测试下

TsaiYen 发表于 2020-6-10 23:09:05

Twilight6 发表于 2020-6-10 23:05
你把你部分测试的txt文件内容复制上来 我测试下

文件里是空的,文件名是users.txt

Twilight6 发表于 2020-6-10 23:18:31

TsaiYen 发表于 2020-6-10 23:09
文件里是空的,文件名是users.txt


现在可以了

def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            asteram.seek(0)
            for answer in asteram:
                print(answer)
                if register_aacount not in answer:
                  input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
                  asteram.seek(0,2)
                  asteram.write(input_user)
                  print("註冊成功")
                  break
                else:
                  print("此帳號已被使用")
                  break
    else:
      print("密碼錯誤")
registered()

Twilight6 发表于 2020-6-10 23:24:36

TsaiYen 发表于 2020-6-10 23:09
文件里是空的,文件名是users.txt


你原来的代码只要把seek 函数移到循环外 也是正确的
def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            asteram.seek(0)
            while True:
                answer = asteram.readline()
                if register_aacount not in answer:
                  input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
                  asteram.write(input_user)
                  print("註冊成功")
                  break
                else:
                  print("此帳號已被使用")
                  break
    else:
      print("密碼錯誤")
registered()

TsaiYen 发表于 2020-6-10 23:36:12

Twilight6 发表于 2020-6-10 23:24
你原来的代码只要把seek 函数移到循环外 也是正确的

很像还是有点问题,指针会乱跑,还有如果文件为空,输入帐号密码终端会停住
头疼呀..

Twilight6 发表于 2020-6-10 23:52:06

TsaiYen 发表于 2020-6-10 23:36
很像还是有点问题,指针会乱跑,还有如果文件为空,输入帐号密码终端会停住
头疼呀..

你要指针固定在哪?

你希望达到的目的要说清楚哦,你是想一直循环注册账号和输入账号?

TsaiYen 发表于 2020-6-10 23:57:59

Twilight6 发表于 2020-6-10 23:52
你要指针固定在哪?

你希望达到的目的要说清楚哦,你是想一直循环注册账号和输入账号?

我要写一个图书管理系统,那我要让用户注册帐号,注册之后的帐号,把它存在文件档案中,然后其他使用者在注册的时候如果帐号名称已经存在,在文件档案中,将显示此用户名称已被使用
萬分感謝你!!!!

Twilight6 发表于 2020-6-11 00:09:59

TsaiYen 发表于 2020-6-10 23:57
我要写一个图书管理系统,那我要让用户注册帐号,注册之后的帐号,把它存在文件档案中,然后其他使用者在 ...

是在已经使用的那行末尾追加 此用户名称已被使用 吗?

TsaiYen 发表于 2020-6-11 00:19:31

Twilight6 发表于 2020-6-11 00:09
是在已经使用的那行末尾追加 此用户名称已被使用 吗?

就是判断使用者输入要注册的帐号,是不是存在于文件档案中,如果是就会打印此用户名称已被使用。
**例如: 资料库里已经有1230这四位数的帐号,但其他使用者也要注册1230,就会打印此用户名称已被使用

Twilight6 发表于 2020-6-11 00:23:53

TsaiYen 发表于 2020-6-11 00:19
就是判断使用者输入要注册的帐号,是不是存在于文件档案中,如果是就会打印此用户名称已被使用。
**例如 ...

在文件档案中,将显示此用户名称已被使用

我看你这句话 以为要把已经被注册写进文档....晕

TsaiYen 发表于 2020-6-11 00:27:15

Twilight6 发表于 2020-6-11 00:23
我看你这句话 以为要把已经被注册写进文档....晕

文字比较难沟通哈哈

Twilight6 发表于 2020-6-11 00:38:29

TsaiYen 发表于 2020-6-11 00:27
文字比较难沟通哈哈


这样可行不?
def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            asteram.seek(0,0)
            answer = asteram.read().split('\n')
            for i in answer:
                if register_aacount not in i:
                  continue
                else:
                  print("此帳號已被使用")
                  break
            else:
                input_user = '{} {}\n'.format(register_aacount, sigh_up_password)
                asteram.write(input_user)
                print("註冊成功")
    else:
      print("密碼錯誤")
judge = 'Y'
while judge == 'Y':
    registered()
    judge = input('是否要继续註冊帳號(输入Y继续注册)?')

TsaiYen 发表于 2020-6-11 01:01:18

Twilight6 发表于 2020-6-11 00:38
这样可行不?

感謝改成這樣就是了!!!
萬分感謝{:5_105:}
我的代碼是哪裡有問題呀..
def registered():
    register_aacount = input("輸入要註冊的帳號:")
    sigh_up_password = input("輸入註冊的密碼:")
    repassword = input("確認密碼:")
    length = len(register_aacount)
    if sigh_up_password == repassword:
      with open('users.txt', 'a+') as asteram:
            asteram.seek(0,0)
            answer = asteram.read().split('\n')
            for i in answer:
                if register_aacount not in i[:length]:
                  continue
                else:
                  print("此帳號已被使用")
                  break
            else:
                input_user = '{} {}\n'.format(register_aacount, sigh_up_password)
                asteram.write(input_user)
                print("註冊成功")
    else:
      print("密碼錯誤")
judge = 'Y'
while judge == 'Y':
    registered()
    judge = input('是否要继续註冊帳號(输入Y继续注册)?')
页: [1]
查看完整版本: 文件檔案