矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: CXFLBH

自从用了AI,感觉我的编程水平突飞猛进

[复制链接]
     
 楼主| 发表于 2024-9-27 14:45:53 | 显示全部楼层
快乐毛毛虫 发表于 2024-9-27 14:19
这种程序技巧真的不推荐,我让手下编程,首先是要程序易懂,不会引起歧义。

在读不懂别人的程序时就用的上了。多一个学习工具岂不更好?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-9-27 14:51:24 | 显示全部楼层
本帖最后由 CXFLBH 于 2024-9-27 14:52 编辑

我们在面对一个对我们自己学习有帮助的工具时,如果你觉得你的水平比它还高,你可以忽略它。如果对你有用,只管拿来用就是。管它是哪家的,哪怕它是敌人家的照样为我所用。我觉得有用,我就会分享给大家,你觉得无用,直接忽略就是。
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 09:50:05 来自手机 | 显示全部楼层
JuncoJet 发表于 2024-9-27 09:54
多用 ++x,少用 x++
先加是可以预料的,执行完后加基本不可预料
除非对代码逻辑非常熟悉

大哥好,可预料不可预料什么意思?有例子吗?开源代码绝大部分都是x++,我想是因为我们都希望访问的时候直接就是数据本身,访问后才指向下一个数据。不可预料是指指针超出了数组大小吗?那前+与后+有何区别?
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 09:58:10 | 显示全部楼层
aidn 发表于 2024-9-29 09:50
大哥好,可预料不可预料什么意思?有例子吗?开源代码绝大部分都是x++,我想是因为我们都希望访问的时候直 ...

一般嵌套循环中,跳出循环后值是个不确定状态
while(Event){
  if(check(x++)){
    break;
  }
}
此处跳出了循环
x是多少谁知道
++x普遍是可以预测
if(!check(++x)){
  while(Event){
    if(check(++x)){
      break;
    }
  }
}
跳出循环后
x的值是最后一次执行的值
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 11:19:28 | 显示全部楼层
JuncoJet 发表于 2024-9-29 09:58
一般嵌套循环中,跳出循环后值是个不确定状态
while(Event){
  if(check(x++)){

你这里的说法有点问题
前/后缀形式的自加都是有严格定义的语义和时序的
++x
可以认为是
x = x + 1, 返回 x 的值


x++
则是
tmp = x, x = x + 1, 返回tmp的值

语句结束后,x的值以及表达式的结果是非常确定的

自加运算最大的问题是它带有副作用
在复杂表达式中,受求值顺序和计算时序的影响,会产生预期以外的效果甚至未定义行为
回复 支持 反对

使用道具 举报

发表于 2024-9-29 11:37:40 来自手机 | 显示全部楼层
scu319hy 发表于 2024-9-29 11:19
你这里的说法有点问题
前/后缀形式的自加都是有严格定义的语义和时序的
++x

习惯是个大问题。

有些C码农喜欢用函数式宏,这加加减减的经过复杂代换后,鬼才知道什么结果。

结果完全依赖引用的顺序和代换的顺序。宏代换发生在预处理阶段,此时还没走到编译这一步,调试器无能为力。

简单还好,这种函数式宏要是多了,就自求多福吧。
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 11:42:19 | 显示全部楼层
scu319hy 发表于 2024-9-29 11:19
你这里的说法有点问题
前/后缀形式的自加都是有严格定义的语义和时序的
++x

那如果x是个迭代器
或者是个索引下标呢
x++退出循环后,如果再用,他就是个越界值
迭代器的话更复杂,有些是单向的,x++后不能x--
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 13:17:09 | 显示全部楼层
JuncoJet 发表于 2024-9-29 11:42
那如果x是个迭代器
或者是个索引下标呢
x++退出循环后,如果再用,他就是个越界值

天灾易防,人祸难躲
你说的这些情况和语言/规范/编译器都没啥关系,是使用者自己玩出的问题
C/C++这类语言的设计初衷是给专业开发人员用的
需要用户能够驾驭计算机,了解计算机的工作原理,编译器的实现细节。而且至少是要读过语言规范的。
否则,很容易会用出一些问题而不自知
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 13:20:41 | 显示全部楼层
scu319hy 发表于 2024-9-29 13:17
天灾易防,人祸难躲
你说的这些情况和语言/规范/编译器都没啥关系,是使用者自己玩出的问题
C/C++这类 ...

所以我指出并建议

多用 ++x,少用 x++
先加是可以预料的,执行完后加基本不可预料
除非对代码逻辑非常熟悉
回复 支持 反对

使用道具 举报

     
发表于 2024-9-29 13:20:50 | 显示全部楼层
chipset009 发表于 2024-9-29 11:37
习惯是个大问题。

有些C码农喜欢用函数式宏,这加加减减的经过复杂代换后,鬼才知道什么结果。

不管是啥语言,如果认识深度不到,难免会用出一些问题
每个人都是一步一步学起来的,不能以专家的水平来要求初学者
如果有些人干了几十年还只是初学者,那他肯定不适合干这个职业
回复 支持 反对

使用道具 举报

     
发表于 2024-10-5 14:54:20 来自手机 | 显示全部楼层
本帖最后由 jhbeyond1979 于 2024-10-5 14:55 编辑

我编程不要借助什么工县,握着笔在纸上写才有灵感,直接电脑上写总觉得没有灵感。上机测试是最后步骤。
回复 支持 反对

使用道具 举报

     
发表于 2024-10-6 15:50:48 | 显示全部楼层
把楼主首帖的问题丢给 Copilot,它前面问题和百度给的答案类似,后面的问题给了两个方法:

Screenshot 2024-10-06 185019.jpg
回复 支持 反对

使用道具 举报

     
发表于 2024-10-6 15:55:34 | 显示全部楼层
本帖最后由 scoopydoo 于 2024-10-6 15:56 编辑

把同样的问题丢给 ChatGPT,它疯狂地给出了 9 种替代方法 ......
Screenshot 2024-10-06 185610.jpg

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2024-10-6 16:03:24 | 显示全部楼层
再试试 Google Gemini,也是大同小异。

感觉这种简单问题不足以测试 AI 编程的真正实力,俺觉得最厉害的应该是 Copilot,毕竟它和 VS Code 是一伙的。
Screenshot 2024-10-06 190118.jpg
回复 支持 反对

使用道具 举报

     
发表于 2024-10-6 16:18:17 | 显示全部楼层
前面的都是高手,我是刚刚入Python的门,把书上的几句抄进IDLE后,运行出错,改来该去都不行,又不知道有没有Python论坛,也不知道怎么求助,在AI那里问了一下,果然搞定了。
我原先出错的:
j = 0
for i in range(5): j = j + 2
print (‘\ni = ’, i, ‘, j = ’, j)
if j == 6:
continue print (‘I will be skipped over if j=6’)
AI回答的:
你的小程序有几个地方需要修改,以确保它能够正常运行并按照你的意图工作。下面是你代码的问题及其修改建议:

缩进问题:在 Python 中,控制结构如 for 和 if 的代码块需要正确缩进。
字符串引号:在 print 函数中的字符串使用了不正确的引号。应该使用英文引号(' 或 "),而不是中文引号(‘ 和 ’)。
continue 语句的用法:continue 只能用在循环体内,并且位置也需要正确。
下面是经过修改的代码:

python
Copy code
j = 0
for i in range(5):
    j = j + 2
    print('\ni =', i, ', j =', j)  # 使用英文引号
    if j == 6:
        continue  # 确保这个和下面的 print 在同一层级,不要是同一层级
    print('I will be skipped over if j=6')
修改说明:
在 for 循环体内的代码都增加了缩进。
print 语句中使用了正确的引号。
使用 continue 语句来跳过后续的打印语句是合理的,但我们需要确保它在标准的逻辑流程中使用。
注意:
在这个代码逻辑中,仅当 j 等于 6 时,print('I will be skipped over if j=6') 语句才会被跳过。给定 j 的更新方式,在 range(5) 循环下,j 的值会在 0, 2, 4, 6, 8 中变化。你可能需要考虑你想要检查 j 为什么值,从而决定是否打印 "I will be skipped over if j=6" 的最终决策。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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