onion0610 发表于 2021-06-03 16:12

【输入一个四位数,逆序输出】分支结构执行出错


做了一个小练习, 逆序输出一个四位数。
写了一个函数,可以选择4种方法执行。
可是执行的时候不管输入数字几都输出num error

#输入一个四位数,逆序输出
def reverse(a):

    print("*" * 10, "1.使用字符串切片操作", "*" * 10)
    print("*" * 10, "2.使用字符串索引和连接操作", "*" * 10)
    print("*" * 10, "3.使用for循环", "*" * 10)
    print("*" * 10, "4.使用数学方法", "*" * 10)
    num = input("输入选择的方法")
    b = ""
    if num == 1:
      b == str(a)[::-1]

    elif num == 2:
      b = str(a)[3]+str(a)[2]+str(a)[1]+str(a)[0]

    elif num == 3:

      for i in str(a):
            b = i + b
    elif num == 4:
      gw = int(a)%10
      sw = int(a)//10%10
      bw = int(a)//10//10%10
      qw = int(a)//1000
      b = gw*1000+sw*100+bw*10+qw
      # b = str(gw)+str(sw)+str(bw)+str(qw)
    else:
      print("error num")
    print(b)

a = input("请输入一个四位数:")
reverse(a)
运行结果:请输入一个四位数:8765********** 1.使用字符串切片操作 ******************** 2.使用字符串索引和连接操作 ******************** 3.使用for循环 ******************** 4.使用数学方法 **********输入选择的方法3error num

然后我在调试的时候发现一个问题,将代码略作修改就可以正常运行修改后的代码:#输入一个四位数,逆序输出
def reverse(a):

    print("*" * 10, "1.使用字符串切片操作", "*" * 10)
    print("*" * 10, "2.使用字符串索引和连接操作", "*" * 10)
    print("*" * 10, "3.使用for循环", "*" * 10)
    print("*" * 10, "4.使用数学方法", "*" * 10)
    num = input("输入选择的方法")
    b = ""
    if num == 1:
      b == str(a)[::-1]

    elif num == 2:
      b = str(a)[3]+str(a)[2]+str(a)[1]+str(a)[0]

    elif num == 3:

      for i in str(a):
            b = i + b
    else:
      gw = int(a)%10
      sw = int(a)//10%10
      bw = int(a)//10//10%10
      qw = int(a)//1000
      b = gw*1000+sw*100+bw*10+qw
      # b = str(gw)+str(sw)+str(bw)+str(qw)
    print(b)

a = input("请输入一个四位数:")
reverse(a)
以上代码可以正常运行差别就在于最后num==4的时候直接写成else的情况请教一下差别在哪里呢???


landihua 发表于 2021-06-07 16:26

因为你根本没进入其他几个判断,你input的类型是str,判断类型是int,所以else成立,一直走的else
加几行
try:
    num=int(num)
except Excetpion as e:
    print(e)

onion0610 发表于 2021-06-08 16:31

回复 2# landihua

感谢!感谢!粗心了{:yct56:}
页: [1]
查看完整版本: 【输入一个四位数,逆序输出】分支结构执行出错