新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V5.9版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 556|回复: 1

[微课] 7412 - 新大榭微课№:002 - 【案例】查找女神手机号(公开课)

 关闭 [复制链接]
发表于 2021-7-14 17:13:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

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

x
上一讲,我们详细介绍了古代经典的《百钱百鸡》问题,还没听懂的请返回【传送门: g2 P: l8 P! v6 L

9 O: N" ^5 i" q" E1 w任何能帮助新大榭社区的建议,欢迎同学们在下方积极留言~4 J  a9 B- r1 W& h4 T

/ ]; r' H) f& S) K好啦,废话不多说,进入今天的主题,查找女神手机号8 E! _3 @  B( J9 S% ^

2 u3 f: F% y% y2 G  `8 y先有请今天的主人公:新大榭阁下~
$ |; a% u: d8 A+ M+ o6 f4 K7 ?9 a  @& P% K2 K$ I
他一直暗恋同是计科专业的同班女神,无数次悉心热情的帮女神修改代码。
* b9 I1 ?! }% Y* d- `4 {(教学需要剧情,请不要深究哈); z; w- X. \% d" @% }# P, h; {

- B, d9 y8 Y. m. C! ~0 j. M有一天,女神又来找新大榭调测程序,二话没说,放下电脑就走了。
3 v8 `* @; r. n* x. h$ [
! K! W1 P/ `2 @新大榭小哥哥看到代码编辑器上写了一段注释:
, X' U& u1 d/ s( x: {3 a
  1. '''! J7 f0 O7 W5 L7 J
  2. 想和我出去约会吗?
    # m+ t! C/ h, Y* A

  3. 4 N7 I* Q. y9 K0 h$ Y4 N
  4. 请根据以下线索找出我手机号 1709098xxxx 的后 4 位,并在今晚 21:00 前短信告诉我集合地方~
    8 @5 H2 N  `3 `5 Y' ?' @

  5.   b* G' |; p7 N- A+ V! L$ }- ]2 @
  6. ##前两位数字相同( Z  c2 x( }( p4 R8 U- ?: f" u
  7. ##后两位数字相同,但与前两位不同, L/ ~8 ~7 }- l+ O! A  r/ R. I+ L
  8. ## 4 位数字刚好是一个整数的平方
复制代码
看到这里,新大榭小哥哥心头小鹿乱撞!
3 V) c& v0 n5 w& k2 _+ q$ [; r3 o7 j  A: H7 l( i, y6 U
想到女神那甜蜜的微笑,仿佛一股清凉的泉水从他心中流过...
8 ^% w" @% o' o6 P& ~6 u+ L
3 T5 s8 a" f# a# B- L& m喜悦和躁动涌进了他的心中,心仿佛荡漾在春水里。. [; C8 s8 Q. W7 O

. {7 r: \7 f; b那颗心乐得快要盛不下蜜糖般的喜悦!!!
0 K& [  Q* A. v; V0 y: e; d& U) d7 R* w- e, ]2 A7 t* E5 \: l
一看手表,还有 20min,既然如此,只能来撸代码了!9 _8 `( p* a" u: c& N; ~
. x; {: Q! D$ u+ k  A2 _
按照女神的要求,其实就是找到一个前两位数相同、后两位数相同且相互间又不同的4位整数。! E: z& {5 y; ]3 k0 I/ G6 U. w) h
& o% {5 t9 r/ ^8 G; K0 n' N' b
然后判断该整数是否是另一个整数的平方!
. H8 |$ @( V+ G7 `6 z
4 k1 g/ P7 r$ Z" T3 W即求一个 4 位数 abcd,满足下面的条件( abcd 均属于[0,9]):
  x) D8 ?9 s9 k& A# i
+ P9 s- C: B: k9 [( T- j4 S
7412_01.jpg
& d7 c' o& @  A4 z
# i2 k4 w3 n/ C其中由注释可知,abcd,又各自相等。$ Y8 M# D) Q: L+ F6 q$ p' N4 r

  c, r2 c9 ~5 q' t. r3 B) p0 R公示有了,最简单粗暴方式还是用 穷举法,一个一个试,答案很快就会浮出水面!
! U2 X) j8 f7 e4 r& t新大榭此时心中想起一句名言:
( l. g" C1 x5 W! [
做好流程图,程序立刻出~
首先设计双层循环穷举出所有由前两位数和后两位数组成的四位数。
7 g. }6 N- c. O% Z! [9 ^/ Y, E
3 n, H& L, O2 H  w; b/ c' L. n然后在最内层穷举出所有平方后结果为四位的数,最后判断该数是否符合总条件,符合则打印答案。
' w1 l0 }5 W4 Z; F8 G+ W# x) h. j& z6 b/ F# Q. {3 b
流程图参上
(点击看大图)' j6 K5 _( e: s$ J/ V
7 B0 M* y) d5 n  X' X: j) W" [+ m
7412_02.jpg , ]" V# q7 L, R2 P& O
+ B, T# U: Y7 i% N8 \
写流程图时新大榭发现找整数时,不一定从1开始,因为女神手机号只能是四位!
& Z! c( }8 f4 W. f
. j9 V3 Z9 w" N( o: h! L0 E. L00xx,这样根本无法满足条件。
" c0 _! w/ U/ N% d4 y5 k" Y
; I0 e4 R3 w% @  I5 s- k/ @; g/ ^既然如此是四位数,那么它的平方根只能是从 3499 之间!(为什么?8 `6 U( r1 G$ Q, B- }+ D

' j) O( I* Q' V8 G如果用上一讲的 while 循环来写,代码就是:
4 B, I$ ~( @4 I0 r8 d
  1. i = 1; r9 W' t% \  O* s, Q6 o# r* t
  2. while i <= 9:
    # ~4 k9 M0 b9 h
  3.     j = 0
    6 x/ g. E! s. C
  4.     while j <= 9:
    1 X" A1 W4 o5 y# B7 i
  5.         if(i != j):, {4 ^! b) c! p/ w+ x$ W; z( K
  6.             k = 1000*i+100*i+10*j+j2 @% t* h! i" }) c2 k, Z& h
  7.             t = 34
    7 S$ ?, b& j- M% H* y: M+ T7 C1 k4 r
  8.             while t <= 99:" N: Z7 D0 {% X7 ~
  9.                 if(k == t*t):9 \/ W; J' @! i
  10.                     print(k)
    9 q2 z9 @. T" |6 j  D' m
  11.                 t += 1
    7 T  C) [( M, U; J2 y
  12.         j += 1
    2 [- v% n* f; Z1 [/ ~
  13.     i += 1
复制代码
. B% f: r* K2 x7 F
while 循环我们都用了这么久,还可以用更省心的 for 循环噢!# h- t8 P) G$ y* Z
2 ]- _# ?) P7 d) v' O
将上面的 while 条件以及 +1 条件,统一用 for () in range() 替换。- F. b# H; Y, ]" K" P. w, m  C
# C+ n, P" i4 M( m# J
所以流程图中所有 while 都可以修改 ,并且最后的 for 循环条件就是 (34,100)
! T+ `$ V" b( Z* Z& |
  1. for t in range(34, 100)
复制代码
代码分分钟搞定了,看下结果:' @  y# N& W) _4 S
; m8 v9 a! c/ `: L

. n: m  V9 v% E8 x+ `5 g3 O) Z! G2 ^" \# Z- H' v2 N
抬手看表,刚刚 20:50,赶紧发短信:
3 l7 P  z8 ~9 }3 D3 I* J/ Z
0 u$ a0 s' n0 C; U
女神我们晚上去......

) Z+ i; s7 l& q/ z9 s3 B哈哈哈,让我们祝新大榭小哥哥幸福吧~~  {0 a( f0 Y/ k* r, T) H4 j

) N2 B  _6 r2 {; `8 v4 [' G源代码(程序那么简单,先自己动手写!稍后老师附参考答案):

0 Z6 U" O6 _" r3 X' |: i% N. e
  1. '''
    4 {: o. P9 o2 P4 x. B
  2. Team: 新大榭" b2 ?  N2 @5 o9 Q" O
  3. Author: 张黎斌' ]0 {$ s+ G; d" S
  4. update: 2021-07-140 o/ w' n# g$ a
  5. Level: A
    % u/ m- M8 v( ~# n2 L3 [

  6. ; r$ i: X+ ?8 r6 t: ?; Q/ c
  7. 想和我出去约会吗?4 S* a0 ]/ z" n( r
  8. 请根据以下线索找出我的手机号1709098XXXX 的后四位* D" B6 a/ c+ c4 P' d, _' r
  9. ! H( V% S  c$ I+ y4 {
  10. 线索1:前两位数字相同
    8 F/ q  R! t/ v6 E9 @
  11. 线索2:后两位数字也相同,但与前两位不同
    " p/ |5 y& [" u3 e7 i  p6 l
  12. 线索3:这四位数刚好是一个整数的平方9 M! r# M# A& M( b
  13. '''
    6 o: [, A8 v! ~2 h: n
  14. for i in range(10):
    - z$ Y/ y- l* q  }) g) a* R/ F! P
  15.     for j in range(10):: O1 T* [8 I+ {7 K# ^% I6 B; z9 j
  16.         if i != j:* b0 g7 r1 s- w
  17.             k = 1000*i + 100*i + 10*j + j
    3 F/ s8 c: x+ g, v, h& Q+ e4 n7 _
  18.             for temp in range(34,100):  # 为什么 34<=temp<100 #因为四位数范围为1100~9988
    ' x4 o# T3 \4 X; B2 H7 g. C, K
  19.                 if temp*temp == k:! a( }2 ]8 ?3 F, O* y! H' C) N/ V/ r
  20.                     print("女神的手机号后四位:",k)
复制代码
注:号码虚构,如有雷同,纯属巧合!

7412.zip

472 Bytes, 阅读权限: 5, 下载次数: 2, 下载积分: 财富 -1 点

新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
 楼主| 发表于 2021-7-18 09:04:05 | 显示全部楼层
下面我们来看看新大榭网校学哥学姐的作业答案吧~ 例如:
# x9 m! A/ X# D$ G+ I# U
  1. import math9 g% O" k8 }$ Z! r4 r* O* X! G
  2. % Z0 L, V. z2 W# Q" V
  3. for x in range(1, 10):
    ( H* E0 F3 c. J
  4.     for y in range(10):2 e, P6 f) S2 ], u6 |
  5.         if x != y:
    ( ?( s: W4 S: m, v  V* J3 ]
  6.             num = x * 1000 + x * 100 + y * 10 + y. V3 Y3 Y- l% S4 c* [! y! E
  7.             if math.sqrt(num) % 1 == 0:
    : F; u& f# i0 a1 A* X9 s" a* y
  8.                 print(num)
复制代码
再如:
: d1 A; r; x+ n7 H& W
  1. for x in range(10):
    8 j3 F5 o. U8 o% ^) K2 c7 |" p
  2.     for y in range(10):
    6 T6 a9 z' |, [( M
  3.         for z in range(32,100):! O+ C6 j- T9 _7 i" i, Q
  4.             k = int(f'{x}{x}{y}{y}')
      A3 N- c/ x1 o7 {9 R3 {
  5.             if x != y and z * z == k:' X- f" Z8 V; L0 \( p+ e
  6.                 print('号码后四位是', k)
复制代码
还有这样的:
9 r4 s+ C& F' k- n
  1. for i in range(32,99):
    : c0 y, t3 U* v; v% J9 T5 V
  2.     num = pow(i,2)/ D) a$ l* _2 S+ ]5 T
  3.     if num%10==int(num%100/10) and int(num/1000)==int(num/100)%10 and (num%10)!=int(num/1000):6 \% d( N8 `, c+ w
  4.         print(num)
复制代码
还有那样的:5 y* e6 P5 |9 Z% t: o* y
  1. for i in range(1,10):- c  Y8 v. o3 I; m) U
  2.     for j in range(1,10):9 X# j: {% j, C( x
  3.         if i != j and pow(i*1000+i*100+j*10+j, 0.5)%1==0:
    5 A! l/ k/ c/ W
  4.             print(i,i,j,j)
复制代码
你更支持那位学哥学姐呢?欢迎评论区留言~ 下课....
:更多公益课程欢迎注册新大榭论坛在线学习!会员级别越高,福利越多!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

新大榭七周年,感谢由您!

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2025-8-21 17:12 , Processed in 0.108932 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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