乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 59|回复: 19

[编程交流] 递增问题

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-5 20:01:12 | 显示全部楼层 |阅读模式
我编写了一些代码,将单个字母插入到使用带属性块的多重引线中。放置第一条多重引线后,它将递增到字母表中的下一个字母,并提示用户放置下一条多重引线。这种情况一直持续到用户将带有字母“Z”的多重引线放置在其中或用户点击“Escape”键之后。我希望它继续经过字母“Z”,但不是只有一个字母,我希望它从“AA”开始,然后继续到“ZZ”。有人能给我指出正确的方向,让我完成这件事吗?
 
  1. (defun c:WID ( / *error* weld numb)
  2. (defun *error* (msg)
  3.    (if (not (member msg '("Function cancelled" "quit / exit abort")))
  4.        (princ (strcat "\nError: " msg))
  5.    )
  6.    (princ)
  7. )
  8. (initget "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z")
  9. (setq weld (getkword "\nEnter weld identification letter: ")
  10.        numb (ascii weld)
  11. )
  12. (while (<= numb 90)
  13.         (command "mleader" pause pause (chr numb))
  14.         (setq numb (1+ numb))
  15. )
  16. (princ)
  17. )

 
未经测试,前往午餐,HTH
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 20:07:19 | 显示全部楼层
谢谢你的建议。我试着玩弄你贴的东西,但我好像没法用。我可能会尝试走另一条路,使用vl string->list。你认为我用这个方法比OP方法更走运吗?
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-5 20:08:43 | 显示全部楼层
您需要将initget从“A-Z”重新定义为“A-ZZ”,使其成为huuuge。
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:13:56 | 显示全部楼层
是的,确实是ksper,除非你的initget从A-Z开始,然后是AA-ZZ,否则我的建议不会起作用
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 20:16:15 | 显示全部楼层
你是对的,但即使在我重新定义initget之后,它仍然不能正常工作。它只从AA到ZZ,而不是从A到Z。由于允许计数大于90,它还开始添加一些符号。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-5 20:19:29 | 显示全部楼层
bhull1985,snownut。。我不敢打赌。。。
我修改了Lisp程序
我走的路:
我检查输入并检索ascii。如果是双字母,则得到第一个字符的ascii码。
我启动一个计数器(setq计数器(+1(-weldascii 65)))。基本上,计数器得到A的值1,B的值2,依此类推。我用它来去掉while,以防止超过z(或zz)。
然后,我检查原始输入是否是单字符列表或双字符列表的一部分,然后在此基础上继续执行条件。ascii编号用于焊接ID。
当其单个输入时,我也使用ascii数,如果ascii超过90(z),我从其值中删除26(从A开始),并使用它两次(AA)。
 
我从来没想过,大师。。
这让我疯狂了好几个小时!!!需要一位大师来解释。。。
在开始时,橙色线是(出口),而不是t。。。这样地
(not(如果(>计数器52)(progn(princ“\n\n无字母,中止”)(exit)))
我不明白为什么当计数器达到52时,程序似乎被评估了。已处理(princ“\n没有字母,例程被中断”),但没有处理(exit)。Cad/vlide frooze和我在控制台上拿到了1美元。我试图监控变量,但由于Cad需要用户输入,我一直没有找到继续的方法。为什么只有一半的程序被处理,而没有退出?
 
最后我简单地返回true(t),在例程被和打断之前使用“not”。。所以,不是f阻止它,而是while/and谁制造了所有的calcelling。有意义吗=D
 
@ksperopoulos。完全工作。我希望你会喜欢=)
干杯
杰夫!
注:欢迎大家发表意见
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 20:21:43 | 显示全部楼层
我建议如下:
  1. 2
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 20:25:20 | 显示全部楼层
Jef!-我感谢您在代码中所做的努力。我在运行它时遇到了一个问题——没有领导。它只有一个带狗腿的文字作为标题。
 
李-几个问题:
1.在第一个IF函数中,为什么计算“”不等于str?从外观上看,如果为“”,则程序在第一段时间内退出。如果有字符串,则继续。
2.为什么使用vl cmdf而不是命令?
3.在暂停时使用“\\”有好处吗?
显然你的代码是有效的。我看到你是如何使用mapcar重置变量lst并在A-Z之间循环的。我甚至理解你是如何从Z转换到AA的。但我不明白你是怎么告诉它从(65)到(66)等等的。你能解释一下你是怎么做到的吗?
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 20:28:09 | 显示全部楼层
 
在初始while循环期间,用户可以通过按Enter键退出循环,使getstring函数返回空字符串(“”)。这是必要的,因为如果未满足焊接ID格式标准,用户将需要使用Esc强制错误退出此循环。
 
注意,随后的if表达式不是初始while循环的一部分,因此程序必须在继续程序操作之前测试是否存在有效字符串。
 
 
因为vl cmdf在将提供的参数提交到命令行之前测试其有效性(而命令函数只是将所有提供的参数提交到命令行),这意味着如果用户在MLEADER命令提示符期间按Esc键,程序将继续运行而不会出错。
 
 
请参见此处。
 
 
请注意,mapcar表达式不是“重置”lst变量,而是增加其内容。
 
 
请参阅我的mapcar函数评估教程:mapcar和Lambda
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:32:08 | 显示全部楼层
嗯。我使用mleader命令,和mleader命令一样,如果将尖端放得离文本太近,箭头尖端将不在那里。
 
也许:mleader中有一些选项,例如,我的要求文本限制为2点,文本比引线尖端。。虽然看起来有些用户只需要指定2个点。最初,当您使用“暂停”“暂停”文本创建引线时,我必须在末尾添加一个暂停,才能使其工作。尽管如此,即使没有李·麦克斯那么优雅(他不支持我,因为我的mleader要求3分,而你的似乎只需要2分),它也适用于我当前的mleader设置。因为我使用引线而不是多重引线,所以我从不更改任何内容,所以我保留了所有原始设置。
 
李,我不得不说,我有点失望,你似乎从我的代码和逻辑中获得了灵感,但没有提及它,没有评论我的代码,也没有回答我的问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:00 , Processed in 0.391844 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表