新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

查看: 586|回复: 1

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

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

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

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

x
上一讲,我们详细介绍了古代经典的《百钱百鸡》问题,还没听懂的请返回【传送门
- S" g  j( R/ A& U( R/ A0 ]# t' @0 k8 q; l" Z9 `( o& |2 @
任何能帮助新大榭社区的建议,欢迎同学们在下方积极留言~
, V6 Y% w5 k) l, x  H& z* I) L: E1 A2 [' \; g
好啦,废话不多说,进入今天的主题,查找女神手机号
: C: C. f6 J; B, Q9 f# A9 J- u% ?  C1 M
先有请今天的主人公:新大榭阁下~/ p* p; ?& h# s/ X% J
  |) S4 w6 A0 r# [# {
他一直暗恋同是计科专业的同班女神,无数次悉心热情的帮女神修改代码。2 x. F! Z. S+ R7 K
(教学需要剧情,请不要深究哈)
1 M  C' ?  [$ u* H" ]% o8 C- S- O% A( k8 `
有一天,女神又来找新大榭调测程序,二话没说,放下电脑就走了。# m  h% M4 p/ F# ]' z

9 U6 C3 P+ x& K$ ?) F8 `3 _新大榭小哥哥看到代码编辑器上写了一段注释:* ~, z( ~+ x3 w2 y
  1. '''
      D  g* G: l5 @& o# b, ~5 P5 D
  2. 想和我出去约会吗?# x$ G/ A; c. u3 k4 B4 J6 n+ a
  3. ' e5 @6 n# N+ J) o
  4. 请根据以下线索找出我手机号 1709098xxxx 的后 4 位,并在今晚 21:00 前短信告诉我集合地方~) H' M3 F: Q& n; P
  5. # H2 K- U. V$ I# D4 {2 u! K( w& T
  6. ##前两位数字相同
    % ^% Q: D) [+ d: N  [+ K8 M  V( o% m
  7. ##后两位数字相同,但与前两位不同
    + ?) s' R9 D2 p) I; }2 n- u: P: x3 y
  8. ## 4 位数字刚好是一个整数的平方
复制代码
看到这里,新大榭小哥哥心头小鹿乱撞!% J' f* {) e9 Z+ A' N

+ x1 F0 |% V- H, D想到女神那甜蜜的微笑,仿佛一股清凉的泉水从他心中流过...
; _8 I1 t% X& G! g) K& U
/ R2 \) _& \) G8 F- _9 L/ {3 g8 [7 g喜悦和躁动涌进了他的心中,心仿佛荡漾在春水里。' s3 o0 U( \  e  I

  d, G  I1 Z  `& J$ g那颗心乐得快要盛不下蜜糖般的喜悦!!!& k2 x0 a" \- Q, o' G$ t

! r% E! A0 b0 }% h- b一看手表,还有 20min,既然如此,只能来撸代码了!
* N3 q! i- D' I' b4 g- E, d5 \. a' w7 O4 r
按照女神的要求,其实就是找到一个前两位数相同、后两位数相同且相互间又不同的4位整数。3 @3 U" p/ ?/ h0 a- `, w6 I9 @

+ b+ W$ j9 j8 t5 ], L- N: O然后判断该整数是否是另一个整数的平方!, G# l1 q, e8 Y$ n, b
2 S+ P6 |, u; \0 B8 O$ ~, a5 N' ?
即求一个 4 位数 abcd,满足下面的条件( abcd 均属于[0,9]):

4 h, Q7 Q( ~3 p$ ^
8 l7 Q5 o7 D. r) W- C+ K" h 7412_01.jpg , P: X$ r; t$ P, h* g: B, e
; B8 j0 ^( @) T: y3 f
其中由注释可知,abcd,又各自相等。
2 k1 Z9 }, v' x6 B/ _
2 O$ _8 D6 X% U4 J0 C+ B' ^' T公示有了,最简单粗暴方式还是用 穷举法,一个一个试,答案很快就会浮出水面!
9 {+ \. H1 g. f( ^; E: F# ?5 \0 G$ k9 X/ t新大榭此时心中想起一句名言:
- c) t  H) I+ L1 l2 n3 u. Q
做好流程图,程序立刻出~
首先设计双层循环穷举出所有由前两位数和后两位数组成的四位数。% }" d- v( O' ~/ b# N! B/ r) X* Z

0 g6 q% a1 t6 V) r, ?. Y然后在最内层穷举出所有平方后结果为四位的数,最后判断该数是否符合总条件,符合则打印答案。
" X. C/ h) Z' n3 ]. i! m, B6 T. L* Z  H# w# H4 X# T5 D
流程图参上
(点击看大图)/ m. v& {* g3 v9 e. ^  O3 p

, l' X* @( ]  c1 G( Z1 y6 u# _* M 7412_02.jpg
8 W; }! b5 v: n9 x( O: U' Z4 ~6 |; V# Z/ w( `; m
写流程图时新大榭发现找整数时,不一定从1开始,因为女神手机号只能是四位!
! X9 G5 O6 I0 _! r
# O: C7 L+ Z# U. A2 i- ^6 z00xx,这样根本无法满足条件。
9 ?- Q( D3 @# M* Q$ L2 M+ |2 l% p: H" L- H+ i- q% h
既然如此是四位数,那么它的平方根只能是从 3499 之间!(为什么?
5 W/ E* D5 L+ i6 U3 E/ f5 D( B3 b
如果用上一讲的 while 循环来写,代码就是:
) g* M/ s/ {7 J$ V
  1. i = 1; B) Q# C& w, z/ A. Q# Y% J
  2. while i <= 9:
    ; p1 t" g: z3 c: g' Y% v5 O
  3.     j = 0
    / \5 F& Z1 C  J
  4.     while j <= 9:8 b. v% I+ O7 w
  5.         if(i != j):- E( B; Z5 b8 r
  6.             k = 1000*i+100*i+10*j+j
    4 k  C: _# W: R$ v
  7.             t = 34
    & S  E$ r9 q! s1 m5 O# q" _
  8.             while t <= 99:
    ( M3 a0 l+ B# ]" Q0 u7 _
  9.                 if(k == t*t):
    1 S7 m' e$ W0 {" c! i0 b: f! |. p+ h
  10.                     print(k)) K- A! Y! W8 K4 L& y5 K/ j
  11.                 t += 1
    , z. n0 Y0 A6 M7 F$ e; L
  12.         j += 15 u; f2 z/ T, Z2 B
  13.     i += 1
复制代码

5 k0 v/ B( _3 a2 b- g* Ywhile 循环我们都用了这么久,还可以用更省心的 for 循环噢!3 B. L8 j( M+ V
/ `( Z2 C  R( O+ e  u* M
将上面的 while 条件以及 +1 条件,统一用 for () in range() 替换。
! {) b7 @) L9 U& R: `) z5 V( R3 P
; B2 x( l) n* e) T/ \所以流程图中所有 while 都可以修改 ,并且最后的 for 循环条件就是 (34,100)
$ q1 }1 ?: A0 ^6 S" \
  1. for t in range(34, 100)
复制代码
代码分分钟搞定了,看下结果:
1 ~! t: S3 ~3 L; Z- h: \, E& }9 m3 }5 `6 ]2 Y: c3 U
$ J) ?/ s' u: p( j. Q

0 f5 r% b" x5 a4 [+ W; p9 y抬手看表,刚刚 20:50,赶紧发短信:
) I( y5 Y2 f7 y- [' A# u! D" O0 Z
# @4 k7 s3 D- V' D/ x, J; M
女神我们晚上去......
: P2 W- p7 n5 u5 z5 s, C
哈哈哈,让我们祝新大榭小哥哥幸福吧~~
2 D" d* b  B8 ^$ `/ W& Z/ o, O
4 d- \0 A2 U5 L2 J( b+ u- q' o源代码(程序那么简单,先自己动手写!稍后老师附参考答案):
1 T3 B- T# ^$ d  B
  1. '''
    ( b9 H* ^! k2 N. A9 ]  n7 `
  2. Team: 新大榭
    & Q0 f& F5 Q4 L- l" n; V
  3. Author: 张黎斌
    3 U1 S' B7 e$ U. J3 c  ?% Q9 a% |
  4. update: 2021-07-14
    % W5 ?, T6 I$ C) R) d
  5. Level: A4 h" n8 G5 }5 x3 {+ Q; m4 U
  6.   T$ w2 t+ E2 [1 K9 {% @' A
  7. 想和我出去约会吗?7 u" y* t* Z. w: L* H' y+ v# m
  8. 请根据以下线索找出我的手机号1709098XXXX 的后四位7 \; \. V" J: [. Z, b# w& m

  9. + V! Y9 w0 Z$ X6 M% Y! `3 j6 H
  10. 线索1:前两位数字相同; _. J6 i  M& y0 }5 \  l
  11. 线索2:后两位数字也相同,但与前两位不同
    * O2 X% F* T3 b5 R: a
  12. 线索3:这四位数刚好是一个整数的平方
    & Z9 z0 e5 c  E2 D9 p# e2 J( F3 \
  13. '''9 V* W2 K4 T& W% A" c  x: U
  14. for i in range(10):
    : e0 @$ p  E, ~6 ]; D/ I" X1 t
  15.     for j in range(10):$ Q0 Q8 ~9 \/ `! ~( G9 Q5 e0 F  B
  16.         if i != j:8 R+ i6 Q9 Q2 m2 B2 R  D
  17.             k = 1000*i + 100*i + 10*j + j
    # ?4 A; l, ?9 o) o6 @3 \4 O8 M
  18.             for temp in range(34,100):  # 为什么 34<=temp<100 #因为四位数范围为1100~9988
    ! W4 Q' S) Q- G0 T3 A
  19.                 if temp*temp == k:- ?4 i: |2 w' T, b
  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 | 显示全部楼层
下面我们来看看新大榭网校学哥学姐的作业答案吧~ 例如:; F3 s' U; v% X7 q6 k# l) a' J: v1 t3 u
  1. import math6 e% X; R4 D. D) z

  2. * H; |0 @3 [0 {: M# K, _
  3. for x in range(1, 10):
    " M8 {" m0 a# W% j8 {* z% R7 `
  4.     for y in range(10):8 G* [9 h3 K$ A# M' k
  5.         if x != y:
    ; g4 d. Q7 e6 L
  6.             num = x * 1000 + x * 100 + y * 10 + y: [' u2 A* U* i! m3 h
  7.             if math.sqrt(num) % 1 == 0:
    5 d! O( ^/ C( [7 i1 k
  8.                 print(num)
复制代码
再如:1 n( D6 U3 o4 R
  1. for x in range(10):
    ; F2 f5 G3 g9 S6 ^
  2.     for y in range(10):
    % K& m6 M0 W7 B+ I" s1 R/ i
  3.         for z in range(32,100):5 n; I& c! o& ^1 h: `7 q
  4.             k = int(f'{x}{x}{y}{y}')1 D& l9 N. i6 b+ D
  5.             if x != y and z * z == k:5 i- q8 o8 n% V/ R+ [9 C' \
  6.                 print('号码后四位是', k)
复制代码
还有这样的:
" z9 W0 ^) V) l/ t
  1. for i in range(32,99):
    6 U7 N. Z% U: V: t# c
  2.     num = pow(i,2)
    2 E$ S5 L" R0 s0 `7 I$ g/ L3 ]1 G
  3.     if num%10==int(num%100/10) and int(num/1000)==int(num/100)%10 and (num%10)!=int(num/1000):2 z+ h& g, f+ N; o/ Q% Y
  4.         print(num)
复制代码
还有那样的:
5 u- L  x! ]$ `
  1. for i in range(1,10):+ I0 l6 X6 r3 @- L* `  n
  2.     for j in range(1,10):
    ! p- W7 W1 T4 f/ c( e- U8 m; D
  3.         if i != j and pow(i*1000+i*100+j*10+j, 0.5)%1==0:6 S8 M, T" R6 |5 `1 q0 i
  4.             print(i,i,j,j)
复制代码
你更支持那位学哥学姐呢?欢迎评论区留言~ 下课....
:更多公益课程欢迎注册新大榭论坛在线学习!会员级别越高,福利越多!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-10-16 16:39 , Processed in 0.088765 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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