鱼C论坛

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

为什么if语句块不会被执行

[复制链接]
发表于 2019-7-20 01:08:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 土☆豆 于 2019-7-20 01:09 编辑

while True:
    a()
    if type(username) == str and type(password) == int:
        print("aaar")
这句print("aaa")为什么不会被执行两边也都是true
这是部分代码IDLE是3.3.2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-20 05:07:37 From FishC Mobile | 显示全部楼层
语句不全
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-20 06:56:30 | 显示全部楼层
不能这样判断变量的类型,改成
  1. if isinstance(username, str) and isinstance(password, int):
复制代码

但是我提醒你,password要int才是int类型,只有input肯定是str
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-20 09:03:52 | 显示全部楼层
代码补全先把
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-20 09:53:58 | 显示全部楼层
你在调试的时候,试试这样调试:

  1. while True:
  2.     a()
  3.     print((type(username) == str), (type(password) == int))
  4.     if type(username) == str and type(password) == int:
  5.         print("aaar")
复制代码


万一你主观臆断,认定它是True,但其实不是呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-20 22:20:05 | 显示全部楼层
阴阳神万物主 发表于 2019-7-20 09:53
你在调试的时候,试试这样调试:


我在IDLE中调试了确实等于True
我的代码中我甚至直接吧username和password的值强制转换成了str和int但是比较后还是不执行
1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-20 22:38:47 | 显示全部楼层

这是我的测试代码
12.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-20 22:39:41 | 显示全部楼层
土☆豆 发表于 2019-7-20 22:20
我在IDLE中调试了确实等于True
我的代码中我甚至直接吧username和password的值强制转换成了str和int但 ...

我的测试代码
12.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-20 22:42:20 | 显示全部楼层
新手·ing 发表于 2019-7-20 06:56
不能这样判断变量的类型,改成

但是我提醒你,password要int才是int类型,只有input肯定是str

我强制吧username转换成str,password转换成int
12.jpg
1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 06:53:18 | 显示全部楼层
那我记错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 09:19:28 | 显示全部楼层
username和password在你的a()函数里面是局部变量,你在函数login()里面调用的其实是全局变量你在一开始就设两个变量为0,所以两个都是int类型两个都是0,你要设全局变量就应该在函数里面声明def login():
    def a():
        print('*********************')
        print('        注册      ')
        global usrname
        global password
        usrname=input("请输入用户名:")
      
        password=int(input("请输入密码:"))
        
      
   
        

    while True:
            a()
            if type(usrname) == str and type(password)==int:
                print("aaaaaa")
            
login()                     
完全可以打印
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 10:41:31 | 显示全部楼层
因为你的输入账号和密码是在函数a()里,是局部变量,你在函数longin()里是找不到的,需要申明全局变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-22 15:28:04 | 显示全部楼层
土☆豆 发表于 2019-7-20 22:38
这是我的测试代码

哦,好吧,看出来了,在定义函数a()的时候,局部变量覆盖了全局变量,也就是说在a()里面对变量的改变没有影响到外面的变量。
python中在定义login()之前的变量声明是完全没必要的,试试在a()的定义范围内使用关键字:global  或者nonlocal,要是还不懂,可以去这里:小甲鱼第20讲的视频
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-22 17:20:32 | 显示全部楼层
新手·ing 发表于 2019-7-20 06:56
不能这样判断变量的类型,改成

但是我提醒你,password要int才是int类型,只有input肯定是str

人家说了两边判断是TURE了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-22 17:21:38 | 显示全部楼层
漫步云端〃 发表于 2019-7-22 17:20
人家说了两边判断是TURE了

我都说了我记错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-22 17:29:19 | 显示全部楼层
本帖最后由 漫步云端〃 于 2019-7-22 17:31 编辑

你看看你给了几个A().会在调用a()的时候变成死循环。

  1. global username
  2. global password

  3. username = 0
  4. password = 0
  5. #2222
  6. def login():
  7.     #3333
  8.     def a ():
  9.         print('*********************************')
  10.         print('注册')
  11.         username = input('请输入用户名')
  12.         password = input('请输入密码')
  13.         
  14.         print('*********************************')

  15.     #4444-->333
  16.     a()   

  17.     while True:
  18.         a()
  19.       
  20.         if type(username) == str and type(password) == int:
  21.             print("aaar")

  22. #11111            
  23. login()
复制代码

你的444会一直到3333
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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