是Pluto啊 发表于 2021-1-1 15:26:14

Python26讲动动手问题

各位新年快乐
Python26讲动动手题目:尝试编写一个用户登录程序(这次尝试将功能封装成函数)
我写的代码是这样的:
dic1 = {}
program = 1
def login():
    while program:
      print('''|---新建用户:N/n---|
|---登录账户:E/e---|
|---退出程序:Q/q---|
|---请输入程序代码:''', end = '')
      a = input()
      if a == N or a == n:
            temp = str(input('请输入用户名:'))
            while temp in dic1:
                print('此用户名已经被使用,请重新输入', end = '')
                temp = str(input())
            code = str(input('请输入密码:'))
            dict1 = code
            print('注册成功,赶紧试试登录吧/n')
      if a == E or a == e:
            username = str(input('请输入用户名:'))
            while username not in dic1:
                print('您输入的用户名不存在,请重新输入:', end = '')
                username = str(input())
            else:
                passcode = str(input('请输入密码:')
                while passcode != dic1.get(username):
                  print('密码错误,请重试:', end = '')
                  passcode = str(input())
                else:
                  print('欢迎进入系统,请点击右上角X结束程序!/n')
                  program = 0
      if a ==Q or a == q:
            program = 0
      else:
            print('指令错误,请重新输入:')

运行的时候一直是invalid,请问各位这究竟是哪里出了问题?
还有小章鱼的代码为什么每次运行一个循环后就会空一行再继续运行下一次循环,是哪个代码实现了这个功能呢?
谢谢大家!

qin_yin 发表于 2021-1-2 12:46:25

本帖最后由 qin_yin 于 2021-1-2 13:04 编辑


我跑了一下你的代码,发现很多地方提示语法错误,图中最后一行报错信息就是缩进错误。一个缩进(tab)等于4个空格,我发现你缩进错误的地方很多,导致整个代码块,很混乱,而且还是使用了为定义的变量,比如n我知道你想表达的意思,到Python认为这是个变量,他会去引用这个变量的值,如果没有变量对应的值就会报错

西瓜味的苹果 发表于 2021-1-2 14:25:42

语法错误,就是一个缩进问题,楼上说的很对,主要是缩进错了,仅此而已

洋洋痒 发表于 2021-1-2 14:51:46

if a == N or a == n:
if a == E or a == e:
if a ==Q or a == q:


if a=='N' or a=='n':
elif a=='Q' or a=='q'
感觉有很多错
不用elif程序会多运行判断几次

洋洋痒 发表于 2021-1-2 16:05:38

还有好几个位置的else都用错了

是Pluto啊 发表于 2021-1-3 07:57:21

qin_yin 发表于 2021-1-2 12:46
我跑了一下你的代码,发现很多地方提示语法错误,图中最后一行报错信息就是缩进错误。一个缩进(tab)等 ...

谢谢您,我去改改看,还有小甲鱼那个代码为什么每次完成一个循环后会空一行然后再重新开始,我之前做的类似的题目每次完成一次循环后就直接开始下一次的循环,没有空行,这是怎么做到的?

是Pluto啊 发表于 2021-1-3 08:14:46

谢谢大家,我去检查修改一下。还有小甲鱼那个代码为什么每次完成一个循环后会空一行然后再重新开始,我之前做的类似的题目每次完成一次循环后就直接开始下一次的循环,没有空行,这是怎么做到的?

是Pluto啊 发表于 2021-1-4 04:48:52

qin_yin 发表于 2021-1-2 12:46
我跑了一下你的代码,发现很多地方提示语法错误,图中最后一行报错信息就是缩进错误。一个缩进(tab)等 ...

你好,我尝试改了一下那个缩进,好像还是有错误,这些while和if语句有些是在上一层的判断中的,所以多缩进了一次,但不知道究竟是哪里出了问题,能否指正一下。
program = 1
def login():
    while program:
      print('''|---新建用户:N/n---|
|---登录账户:E/e---|
|---退出程序:Q/q---|
|---请输入程序代码:''', end = '')
      a = input()
      
      if a == N or a == n:
            temp = str(input('请输入用户名:'))
            
            while temp in dic1:
                print('此用户名已经被使用,请重新输入', end = '')
                temp = str(input())
               
            code = str(input('请输入密码:'))
            dict1 = code
            print('注册成功,赶紧试试登录吧/n')
            
      if a == E or a == e:
            username = str(input('请输入用户名:'))
            while username not in dic1:
                print('您输入的用户名不存在,请重新输入:', end = '')
                username = str(input())
               
            passcode = str(input('请输入密码:')
            while passcode != dic1.get(username):
                print('密码错误,请重试:', end = '')
                passcode = str(input())
               
            print('欢迎进入系统,请点击右上角X结束程序!/n')
            program = 0
            
      if a ==Q or a == q:
            program = 0
            
      else:
            print('指令错误,请重新输入:')

是Pluto啊 发表于 2021-1-4 04:49:49

西瓜味的苹果 发表于 2021-1-2 14:25
语法错误,就是一个缩进问题,楼上说的很对,主要是缩进错了,仅此而已

你好,我尝试改了一下那个缩进,好像还是有错误,这些while和if语句有些是在上一层的判断中的,所以多缩进了一次,但不知道究竟是哪里出了问题,能否指正一下。
dic1 = {}
program = 1
def login():
    while program:
      print('''|---新建用户:N/n---|
|---登录账户:E/e---|
|---退出程序:Q/q---|
|---请输入程序代码:''', end = '')
      a = input()
      
      if a == N or a == n:
            temp = str(input('请输入用户名:'))
            
            while temp in dic1:
                print('此用户名已经被使用,请重新输入', end = '')
                temp = str(input())
               
            code = str(input('请输入密码:'))
            dict1 = code
            print('注册成功,赶紧试试登录吧/n')
            
      if a == E or a == e:
            username = str(input('请输入用户名:'))
            while username not in dic1:
                print('您输入的用户名不存在,请重新输入:', end = '')
                username = str(input())
               
            passcode = str(input('请输入密码:')
            while passcode != dic1.get(username):
                print('密码错误,请重试:', end = '')
                passcode = str(input())
               
            print('欢迎进入系统,请点击右上角X结束程序!/n')
            program = 0
            
      if a ==Q or a == q:
            program = 0
            
      else:
            print('指令错误,请重新输入:')
页: [1]
查看完整版本: Python26讲动动手问题