题主你好,
之所以报错是因为while循环从第2次开始执行时, selectcourse这个变量的类型就变成
整型 了, 而整型是没有isdigit()函数的, 所以才会报错.
咱们简单的过一下代码的执行过程:
a.第12行执行后, 你输入的是2, 所以此时selectcourse这个变量是
字符串类型值'2', 从你的提问来看,这一点你是理解的, 接着向下看
b.然后就执行while True这个循环了, 我们先看这个while循环第一次执行, 第14行的
if语句条件判断是true,因为2是数字, 所以if下的15,16行会被执行, 这块是关键, 第15行执行后, selectcourse的类型就不再是一开始的字符串类型了, 而是变成了整型; 16行打印输出就不讲了. 这是while True循环的第一次执行, 这次执行最最关键的就是将selectcourse这个变量的类型由字符串类型改为了整型(报错的起始点就在这).
c.再看while循环的第2次执行, 第2次执行又到第14行判断if条件这了, 你的报错其实就是这会儿出现的, 因为第1次while循环已经将selectcourse这个变量的类型改为了整型, 所以第2次再去执行if的条件时, 就会报错了, 因为selectcourse此时是整型, 而整型是没有isdigit()函数的.
-----
希望可以帮到题主, 欢迎追问.
追问感谢大佬耐心解答。我完全明白了。转换为int类型的目的是接下来要做数值的比较,如何在保留while循环的情况下,对这个变量做比较呢?
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/a8ec8a13632762d098fc3cc0b0ec08fa503dc68b?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
追答把第12行移到while True下作为第一行, 与if同级:
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/7acb0a46f21fbe09ec64586b7b600c338744ad93?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)