首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的外部变量在使用while循环时没有改变?

在使用while循环时,外部变量没有改变的原因可能是由于作用域的问题。在循环体内部定义的变量具有局部作用域,只在循环体内部有效,循环体外部的变量无法被修改。

解决这个问题的方法是在循环体外部定义变量,并在循环体内部对其进行修改。例如,可以在循环体之前定义一个变量,并在循环体内部对其进行操作。这样,循环体内部对变量的修改就能够影响到循环体外部。

以下是一个示例代码:

代码语言:txt
复制
count = 0  # 在循环体外部定义变量

while count < 5:
    count += 1  # 在循环体内部对变量进行修改
    print(count)

print("循环结束后的count值为:", count)

在上述代码中,count变量在循环体外部定义,并在循环体内部进行了修改。最终,循环结束后的count值为5。

需要注意的是,如果在循环体内部使用了与外部变量同名的局部变量,那么循环体内部的操作将只会影响到局部变量,而不会改变外部变量的值。为了避免这种情况,可以使用关键字global来声明变量为全局变量,从而在循环体内部修改外部变量的值。

代码语言:txt
复制
count = 0  # 在循环体外部定义变量

def modify_count():
    global count  # 声明count为全局变量
    count += 1

while count < 5:
    modify_count()
    print(count)

print("循环结束后的count值为:", count)

在上述代码中,通过在modify_count()函数内部使用global关键字声明count为全局变量,使得循环体内部对count的修改能够影响到循环体外部。最终,循环结束后的count值为5。

总结起来,当外部变量在使用while循环时没有改变时,可能是由于作用域的问题。可以通过在循环体外部定义变量,并在循环体内部对其进行修改,或者使用global关键字声明变量为全局变量来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

计算机萌新成长历程——初识C语言16

……else if……else,再比如咱们循环语句:while、for、do……while等等。...换句话说就是给这些数据类型重新起个名字,比如整型它名字是int,可以通过typedef给它再起个小名i,这时i就相当于是int,它具有int性质,我们使用i,就像在使用int。...那说明一次循环过后,a是自动消失了,然后再进入循环后它又在函数内自动创建了这个创建过程就是 int a = 1;这里要说明局部变量前面我们省略了一个关键字auto,也就是说,这里局部变量完整代码是...通过上面的测试,我们验证了static第二个作用:static修饰全局变量,会限制全局变量作用域; 3.static修饰函数——改变了函数链接属性 通过前面的分享,我们学会了如何使用自定义函数...: 函数在所处项目内正常被调用,并无任何影响,说明函数在被static修饰后函数自身链接属性被改变了,函数失去了它外部链接属性,这里我们通过测试验证了static第三个作用:static修饰函数

16520

R 茶话会(一:可恶for 循环

这也就是为什么,我们循环内部直接使用变量,它没有任何返回结果;而在外部,可以直接通过变量获取对象值。...没想到,你循环内部还留了一手: 不知道是为了什么,外部简化了打印,可以循环内部还是保留了这个所谓“缺点”。...而这个循环中声明创建变量,是会在全局发生作用,如果你循环外部曾经用同样变量名进行过其他赋值,它会覆盖当前环境中已经存在对象: > i = 666 > for (i in 1:5) {} > i...[1] 5 开始也以为循环和函数一样,创建是局部变量,原来循环内部也是属于全局,因此会将变量重新赋值,也就是赋值给遍历对象最后遍历结果。...,我们来复习一下:1)使用循环,如果想要打印对象返回值,一定需要使用print;2)使用循环,一定要选择不同变量名,无论是进行遍历时使用变量还是循环内部重新进行赋值变量

90520

C语言基础知识入门(大全)「建议收藏」

while语句中表达式一般是关系表达或逻辑表达式,当表达式值为假不执行循环体,反之则循环体一直执行。 一定要记着循环体中改变循环变量值,否则会出现死循环(无休止执行)。...因此,do-while循环至少要执行一次循环语句。 注意:mtianyan: 使用do-while结构语句while括号后必须有分号。...3.三种循环比较 while, do-while和for三种循环具体使用场合上是有区别的,如下: 知道循环次数情况下更适合使用for循环; 不知道循环次数情况下适合使用while或者do-while...使用break语句注意以下几点: 没有循环结构情况下,break不能用在单独if-else语句中。 多层循环中,一个break语句只跳出当前循环。...C语言中能被其他源文件调用函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,没有指定函数作用范围,系统会默认认为是外部函数

1.9K41

数据结构初步(五)- 线性表之单链表分析与C语言实现

pos之前插入数据,最坏时间复杂度为 O(n) 分为3种情况 链表为空,没有节点无法节点之前插入数据,说明调用本函数使用者传参传错了,使用者应该至少保证链表有一个结点情况下使用此函数,...为了防止使用者传入了不是本链表内结点,导致循环结束也找不到pos,prev就指向了NULL,对prev此时就是空指针,while循环条件便可能会对空指针解引用,而导致程序出错。...pos之前插入数据,时间复杂度为 O(1) 两种情况: 链表为空,没有节点无法节点之前插入数据,说明调用本函数使用者传参传错了,使用者应该至少保证链表有一个结点情况下使用此函数,函数内部并不需要对此情况做出判断...,本函数内部把del置为NULL并不会影响外部节点,局部指针变量del本接口函数返回就被销毁了,所以del置不置为NULL都可以。...同时我们使用临时指针变量cur从头节点开始一次访问链表各个节点并释放这些节点。这样不直接通过二级指针pphead使用外部头指针phead避免了外部头指针改变

80710

遍历数据arraylist效率高于linkedlist_遍历问题种类

每一个迭代器创建时候,会从外部获取当前 modCount赋给迭代器成员变量 expectedModCount,然后每次调用迭代器 next()方法,或者其他增删方法都会比较modCount和expectedModCount...相比直接调用外部 remove() ,迭代器内部 remove()调用外部 remove()以后,又更新了 expectedModCount,这个 expectedModCount是个迭代器内部成员变量...换句话说,和 forEach()一样,并不是只有 remove()才会引起如此问题,迭代器迭代过程中,调用任何外部会导致 modCount改变方法都会使其抛异常。...和 ArrayList 迭代器删除一样,由于调用外部 remove()导致modCount改变,而expectedModCount没有改变,因此调用next()时候会因为过不了 expectedModCount...ArrayList 重写了 forEach()方法,从增强 for 改为了普通 for 循环,但是方法最开始也记录了modCount,每次循环都会对比,因此也会因为循环改变了 modCount而抛异常

66210

第四章3:while 循环

正在以推文形式连载出来,欢迎学习。 星期三:while循环 今天我们将讨论另一种循环——while循环。昨天我们看到了循环工作原理,以及为什么使用for循环。...For 虽然,之前已经多次解释了我们使用每个循环类型原因,但是,再次重申这些概念仍然是有必要。当需要计数或迭代,通常使用for循环执行基于条件操作,通常使用while循环。...这是因为game_over变量从不变没有变为True,while循环条件一直符合并不断运行,直到game_over变量变为True。...嵌套循环 一个循环内包含另一个循环概念就是我们所说嵌套循环。同时,循环概念仍然适用。使用嵌套循环,只有内循环代码完成运行后,外部循环代码才会运行。...while循环只有条件变量game_over为True,才会停止循环,而输出结果只有0,1,2。 ---- 小提示:使用break语句,防止程序陷入无限循环

1.5K20

Java面试之关键字

static final相当于类常量,就是类被加载进内存时候就要为属性分配内存,static块就是类被加载时候执行且被执行依稀,所以可以在其中初始化 使用final关键字修饰一个变量,是引用不能变...finally是异常处理提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中内容是无异常执行到结束。...java技术允许使用finalize()方法垃圾收集器将对象从内存中清除出去之前做必要清理工作。这个方法是由垃圾收集器确定这个对象没有被引用时对这个对象调用。...C语言中,siazeof是一个判断数据类型长度符关键字,它可以返回一个对象或者类型所占内存字节数 为什么Java中没有sizeof()?...|类型 while 循环和 do 循环有什么不同 while语法格式: while(布尔表达式){ //语句 } 如果布尔表达式为真就会执行循环体中语句然后判断该布尔表达式如果还为真的话就会执行循环体中语句一直到布尔表达式为

627100

python流程控制

这样大家就能清楚明白while到底是如何进行循环了,那么问题也来了:我们如果要终止这个循环如何终止呢? 终止循环几种方式: 改变条件(根据上面的流程,只要改变条件,就会终止循环)。...调用系统命令:quit(),exit() 后面会讲到,不建议大家使用。 关键字:continue(终止本次循环)。 利用改变条件,终止循环。给大家引入标志位概念。...与其它语言else 一般只与if 搭配不同,Python 中还有个while …else 语句 while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行...常用在当某个外部条件被触发(一般通过 if 语句检查),需要立即从循环中退出.。break 语句可以用在 while 和 for 循环中。...程序中当遇到 continue 语句, 程序会终止当前循环,并忽略剩余语句,然后回到循环顶端。开始下一次迭代前,如果是条件循环,我们将验证条件表达式。

1.9K40

【C语言笔记】volatile关键字

编译器优化 本次线程内,当读取一个变量,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后再取变量,就直接从寄存器中取值; 当变量本线程里改变,会同时把变量新值copy...到该寄存器中,以便保持一致 当变量因别的线程等而改变了值,该寄存器值不会相应改变,从而造成应用程序读取值和实际变量值不一致; 当该寄存器因别的线程等而改变了值,原变量值不会改变,从而造成应用程序读取值和实际变量值不一致...员工 -- 原始变量地址 银行卡号 -- 原始变量寄存器备份 volatile例子 精确地说就是,优化器在用到这个变量必须每次都小心地重新读取这个变量值,而不是使用保存在寄存器里备份。...,不然函数体里只会使用副本,外部没法更改 { int a,b; a = *ptr; b = *ptr; return a*b; } 由于*ptr值可能在两次取值语句之间发生改变..._2(void) { i=1; } 程序本意是希望ISR_2中断产生main当中调用dosomething函数,但是,由于编译器判断main函数里面没有修改过i,因此可能只执行一次对从

73660

学会使用函数式编程程序员(第1部分)

你可能又会想 :“怎么能在没有变量情况下做任何事情呢?” 我们想一下什么时候需要修改变量。通常会想到两种情况:多值更改(例如修改或记录对象中单个值)和单值更改(例如循环计数器)。...函数式编程使用参数保存状态,最好例子就是递归。是的,是没有循环。“什么没有变量,现在又没有循环? ”讨厌你! ! !”...哈哈,这并不是说我们不能做循环,只是没有特定循环结构,比如for, while, do, repeat等等。 函数式编程使用递归进行循环。...虽然这是有争议,而且更可能是一个熟悉问题,但非递归循环需要可变性,这是不好。 在这里,没有完全解释不变性好处,但是请查看全局可变状态部分,即为什么程序员需要限制来了解更多。...没有完全解释不可变性(Immutability)在这里好处,但请查看 为什么程序员需要限制全局可变状态部分 以了解更多信息。

66730

每天 3 分钟,小闫带你学 Python(八)

第 0 遍:喜欢你 第 1 遍:喜欢你 第 2 遍:喜欢你 第 3 遍:喜欢你 第 4 遍:喜欢你 下面进行讲解:可以看到 while 条件是 i<5 ,因此必须定义变量 i 一个起始值(...1.2.1 while 循环应用 学会了 while 循环基本使用后,当然要选几个小栗子进行练习啦。希望大家看到题目先自己尝试编写,写完之后,或者思考完仍然没有思路可以看下方答案。...同样先来看一下它格式: for 临时变量 in 列表,字符串之类可迭代对象: 满足条件循环执行代码 可迭代对象就是可以被遍历对象,即使用 for 循环可以将里面的每一个元素提取出来,并赋值给临时变量...for 循环内部可以使用此临时变量外部不可以使用。...1.4.1 break 是终止所在循环。举个例子,当你使用循环嵌套,内部使用了 break,不影响外部

63320

__block  __weak  __strong   这都是做什么

Block定义copy变量值,Block中作为常量使用,所以即使变量Block外改变,也不影响他Block中值,Block此时对局部变量只是做了值传递操作。...屏幕快照 2016-06-23 下午2.18.28.png 上图代码中, Block外部定义一个C语言字符串字面量数组, Block内部截获自动变量方法并没有实现对C语言数组截获, 此时访问数组元素...关于__block 修饰符 从上面讲解我们已经知道,Block内部能够读取外部局部变量值。但如果我们需要在Block内部修改变量值,则需要在Block外部给该变量添加一个__block修饰符。...为什么使用__block可以实现在Block内部修改外部变量值?...此时就需要使用__weak,修饰变量,修饰符修饰变量self,让 block 不强引用self,从而破除循环

57530

python中看似没用写法,却是老手都不一定会原理。解决闭包延迟绑定

点赞、收藏、关注,是创作动力。 现在我们从最简单函数使用外部变量情况开始: 为了函数中使用外部变量,这是最直观做法。这种函数中直接使用外部定义变量,还有一种叫法:'闭包'。...现在稍微修改一下代码: 函数执行之前,修改了外部变量,大家认为函数执行后打印了什么? 看看结果: 不知道你猜对了没有,不过是觉得这个结果同样符合直觉。 你也觉得结果符合直觉吗?...这是因为函数里面使用外部变量,就是要表达:“执行 print ,获取变量此时此刻值。...定义了函数 函数内部,希望使用外部定义变量 定义函数后,并没有立刻执行,并且当函数执行时候,使用外部变量很可能已经被修改了 由于 python 写交互程序不多,一个函数执行时机基本上都是我们使用代码明确编写...下面是一个循环创建10个按钮,点击界面出现提示信息: 上面的代码创建了10个不同函数对象,可惜是,行7变量 idx 是外部变量 idx(行4),并且循环执行过程中,idx 值不断增加,最终值停留在

11610

CC++ volatile

由于访问寄存器速度要快过RAM(从RAM中读取变量值到寄存器),以后只要变量没有改变,就一直从寄存器中读取变量值,而不对RAM进行访问。...而在多任务环境中,虽然一个函数体内部,两次读取变量之间没有变量值进行修改,但是该变量仍然有可能被其他程序(如中断程序、另外线程等)所修改。...如果将变量i加上volatile修饰,则编译器保证对变量i读写操作都不会被优化,从而保证了变量i被外部程序更改后能及时原程序中得到感知。 (3)多线程应用中被多个任务共享变量。...volatile意思是让编译器每次操作该变量一定要从内存中真正取出,而不是使用已经存在寄存器中值。...为什么? 是的。一个例子是只读状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 (2)一个指针可以是volatile吗?为什么

1.8K31

编程时常见8种错误

但幸运又随之而来,在这里,将新程序员遇到过最常见8个错误集合到一起,方便大家学习 1 使用单“=”检查是否相等 char x='Y'; while(x='Y') { //...  ...(Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码循环条件判断使用了一个等号来检查是否相等,实际上程序执行时会把表达式右边值赋给左边变量,实际上是执行了变量赋值...C++中,一旦给某一个变量赋值后,这个变量值就不会改变,除非给他重新赋值。...while循环,因为C++中,整型变量并不会默认赋值0.在上面的代码中count可以是int范围内任何值。...5 函数未定义 int main() { add(); } void add() { //... } 编译时会报错,明明后面有定义了add函数,为什么还说没有定义add~ 在编译代码

1K40

编程时常见8种错误

但幸运又随之而来,在这里,将新程序员遇到过最常见8个错误集合到一起,方便大家学习 1 使用单“=”检查是否相等 char x='Y'; while(x='Y') { //......(Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码循环条件判断使用了一个等号来检查是否相等,实际上程序执行时会把表达式右边值赋给左边变量,实际上是执行了变量赋值...C++中,一旦给某一个变量赋值后,这个变量值就不会改变,除非给他重新赋值。...5 函数未定义 int main() { add(); } void add() { //... } 编译时会报错,明明后面有定义了add函数,为什么还说没有定义add~ 在编译代码,编译器不知道...这样就会将代码原有逻辑改变。因此在编程切记:分号不能出现在if语句、循环或函数定义之后。如果您在这些位置中放置了一个,您程序将无法正常运行。

76410

详解CC++中volatile关键字

如果不幸进行了这样优化,那么while循环就变成了死循环,因为寄存器内容不可能被中断服务程序修改。...ISR_2中断产生main当中调用do_something函数,但是,由于编译器判断main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器读操作,然后每次if判断都只使用这个寄存器里面的...2、C语言关键字volatile C语言关键字volatile(注意它是用来修饰变量而不是上面介绍volatile)表明某个变量值可能在外部改变,因此对这些变量存取不能缓存到寄存器,每次使用时需要重新存取...自然就把它cache寄存器里面。记住,C 编译器是没有线程概念!这时候就需要用到volatile。volatile 本意是指:这个值可能会在当前线程外部改变。...也就是说,我们要在threadFunc中intSignal前面加上volatile关键字,这时候,编译器知道该变量值会在外部改变,因此每次访问该变量时会重新读取,所作循环变为如下面伪码所示: 1label

60130

初学者c语言_怎样自学C语言

while语句中表达式一般是关系表达或逻辑表达式,当表达式值为假不执行循环体,反之则循环体一直执行。 一定要记着循环体中改变循环变量值,否则会出现死循环(无休止执行)。...4、三种循环比较 while, do-while和for三种循环具体使用场合上是有区别的,如下: 知道循环次数情况下更适合使用for循环; 不知道循环次数情况下适合使用while或者do-while...使用break语句注意以下几点: 没有循环结构情况下,break不能用在单独if-else语句中。 多层循环中,一个break语句只跳出当前循环。...C语言中能被其他源文件调用函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,没有指定函数作用范围,系统会默认认为是外部函数...其作用域仅限于函数内, 离开该函数后再使用这种变量是非法复合语句中也可定义变量,其作用域只复合语句范围内。 全局变量也称为外部变量,它是函数外部定义变量

1.1K20
领券