鱼C论坛

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

[已解决]文件檔案

[复制链接]
发表于 2020-6-10 22:39:24 | 显示全部楼层 |阅读模式

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

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

x
亲爱的鱼友可以帮我看看这题的问题吗
1. 我想要在档案文件中读取,在终端输入的帐号名称有没有跟档案文件的帐号名称一样,有的话显示此用户名称已被使用
2.我发现我的代码只能读取一行
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             while True:
  8.                 asteram.seek(0)
  9.                 answer = asteram.readline()   
  10.                 if register_aacount not in answer:
  11.                     input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
  12.                     asteram.write(input_user)
  13.                     print("註冊成功")
  14.                     break
  15.                 else:
  16.                     print("此帳號已被使用")     
  17.                     break   
  18.     else:
  19.         print("密碼錯誤")
  20. registered()
复制代码
最佳答案
2020-6-11 00:38:29
TsaiYen 发表于 2020-6-11 00:27
文字比较难沟通哈哈


这样可行不?
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             asteram.seek(0,0)
  8.             answer = asteram.read().split('\n')
  9.             for i in answer:
  10.                 if register_aacount not in i:
  11.                     continue
  12.                 else:
  13.                     print("此帳號已被使用")
  14.                     break
  15.             else:
  16.                 input_user = '{} {}\n'.format(register_aacount, sigh_up_password)
  17.                 asteram.write(input_user)
  18.                 print("註冊成功")
  19.     else:
  20.         print("密碼錯誤")
  21. judge = 'Y'
  22. while judge == 'Y':
  23.     registered()
  24.     judge = input('是否要继续註冊帳號(输入Y继续注册)?')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-10 22:45:26 | 显示全部楼层

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

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

去掉应该就能正常运行了:
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             while True:
  8.                 answer = asteram.readline()
  9.                 if register_aacount not in answer:
  10.                     input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
  11.                     asteram.write(input_user)
  12.                     print("註冊成功")
  13.                     break
  14.                 else:
  15.                     print("此帳號已被使用")
  16.                     break
  17.     else:
  18.         print("密碼錯誤")
  19. registered()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 23:00:03 | 显示全部楼层
不行欸qq
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 23:05:27 | 显示全部楼层

你把你部分测试的txt文件内容复制上来 我测试下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 23:09:05 | 显示全部楼层
Twilight6 发表于 2020-6-10 23:05
你把你部分测试的txt文件内容复制上来 我测试下

文件里是空的,文件名是users.txt
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 23:18:31 | 显示全部楼层
TsaiYen 发表于 2020-6-10 23:09
文件里是空的,文件名是users.txt


现在可以了

  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             asteram.seek(0)
  8.             for answer in asteram:
  9.                 print(answer)
  10.                 if register_aacount not in answer:
  11.                     input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
  12.                     asteram.seek(0,2)
  13.                     asteram.write(input_user)
  14.                     print("註冊成功")
  15.                     break
  16.                 else:
  17.                     print("此帳號已被使用")
  18.                     break
  19.     else:
  20.         print("密碼錯誤")
  21. registered()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 23:24:36 | 显示全部楼层
TsaiYen 发表于 2020-6-10 23:09
文件里是空的,文件名是users.txt


你原来的代码只要把seek 函数移到循环外 也是正确的
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             asteram.seek(0)
  8.             while True:
  9.                 answer = asteram.readline()
  10.                 if register_aacount not in answer:
  11.                     input_user = '{} {} \n'.format(register_aacount, sigh_up_password)
  12.                     asteram.write(input_user)
  13.                     print("註冊成功")
  14.                     break
  15.                 else:
  16.                     print("此帳號已被使用")
  17.                     break
  18.     else:
  19.         print("密碼錯誤")
  20. registered()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 23:36:12 | 显示全部楼层
Twilight6 发表于 2020-6-10 23:24
你原来的代码只要把seek 函数移到循环外 也是正确的

很像还是有点问题,指针会乱跑,还有如果文件为空,输入帐号密码终端会停住
头疼呀..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你要指针固定在哪?

你希望达到的目的要说清楚哦,你是想一直循环注册账号和输入账号?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 23:57:59 | 显示全部楼层
Twilight6 发表于 2020-6-10 23:52
你要指针固定在哪?

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

我要写一个图书管理系统,那我要让用户注册帐号,注册之后的帐号,把它存在文件档案中,然后其他使用者在注册的时候如果帐号名称已经存在,在文件档案中,将显示此用户名称已被使用
萬分感謝你!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

是在已经使用的那行末尾追加 此用户名称已被使用 吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 00:19:31 | 显示全部楼层
Twilight6 发表于 2020-6-11 00:09
是在已经使用的那行末尾追加 此用户名称已被使用 吗?

就是判断使用者输入要注册的帐号,是不是存在于文件档案中,如果是就会打印此用户名称已被使用。
**例如: 资料库里已经有1230这四位数的帐号,但其他使用者也要注册1230,就会打印此用户名称已被使用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


我看你这句话 以为要把已经被注册写进文档....晕
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 00:27:15 | 显示全部楼层
Twilight6 发表于 2020-6-11 00:23
我看你这句话 以为要把已经被注册写进文档....晕

文字比较难沟通哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 00:38:29 | 显示全部楼层    本楼为最佳答案   
TsaiYen 发表于 2020-6-11 00:27
文字比较难沟通哈哈


这样可行不?
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     if sigh_up_password == repassword:
  6.         with open('users.txt', 'a+') as asteram:
  7.             asteram.seek(0,0)
  8.             answer = asteram.read().split('\n')
  9.             for i in answer:
  10.                 if register_aacount not in i:
  11.                     continue
  12.                 else:
  13.                     print("此帳號已被使用")
  14.                     break
  15.             else:
  16.                 input_user = '{} {}\n'.format(register_aacount, sigh_up_password)
  17.                 asteram.write(input_user)
  18.                 print("註冊成功")
  19.     else:
  20.         print("密碼錯誤")
  21. judge = 'Y'
  22. while judge == 'Y':
  23.     registered()
  24.     judge = input('是否要继续註冊帳號(输入Y继续注册)?')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-11 01:01:18 | 显示全部楼层


感謝改成這樣就是了!!!
萬分感謝
我的代碼是哪裡有問題呀..
  1. def registered():
  2.     register_aacount = input("輸入要註冊的帳號:")
  3.     sigh_up_password = input("輸入註冊的密碼:")
  4.     repassword = input("確認密碼:")
  5.     length = len(register_aacount)
  6.     if sigh_up_password == repassword:
  7.         with open('users.txt', 'a+') as asteram:
  8.             asteram.seek(0,0)
  9.             answer = asteram.read().split('\n')
  10.             for i in answer:
  11.                 if register_aacount not in i[:length]:
  12.                     continue
  13.                 else:
  14.                     print("此帳號已被使用")
  15.                     break
  16.             else:
  17.                 input_user = '{} {}\n'.format(register_aacount, sigh_up_password)
  18.                 asteram.write(input_user)
  19.                 print("註冊成功")
  20.     else:
  21.         print("密碼錯誤")
  22. judge = 'Y'
  23. while judge == 'Y':
  24.     registered()
  25.     judge = input('是否要继续註冊帳號(输入Y继续注册)?')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 18:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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