新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

查看: 592|回复: 1

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

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

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

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

x
上一讲,我们详细介绍了古代经典的《百钱百鸡》问题,还没听懂的请返回【传送门+ B9 n* H' L& x0 {

8 p" n# v/ m; O/ ~任何能帮助新大榭社区的建议,欢迎同学们在下方积极留言~6 l# b2 E9 Q, _, e: ]% P1 `

" g" F; d- }6 w- l6 w/ P好啦,废话不多说,进入今天的主题,查找女神手机号& B* R9 e/ ]. a

  }% \7 L2 z7 V" l先有请今天的主人公:新大榭阁下~
, D- A2 y; z& G' r/ a: F/ M& c/ u7 B+ w" x- z4 R+ D4 C
他一直暗恋同是计科专业的同班女神,无数次悉心热情的帮女神修改代码。
8 N" {1 V& J0 o7 B1 l% A(教学需要剧情,请不要深究哈)$ e& \+ W* D6 d

) d8 B& b6 w6 n# ?, T有一天,女神又来找新大榭调测程序,二话没说,放下电脑就走了。5 s( u1 m+ v; x  p- R

& F7 R( R; Z6 V7 Z% H新大榭小哥哥看到代码编辑器上写了一段注释:
: m4 ^+ a: w1 @# t( f
  1. '''# B* u* S# V. B7 y- s
  2. 想和我出去约会吗?
    & \6 r5 F: e2 i* d. N8 x, j

  3. 2 I1 @* P; m* m. M$ m
  4. 请根据以下线索找出我手机号 1709098xxxx 的后 4 位,并在今晚 21:00 前短信告诉我集合地方~0 S* z- o% ~% A+ ~7 P% W* h" Y

  5. 7 J- _4 }8 m* B3 I% C
  6. ##前两位数字相同. c  Y0 n6 i% I' S) p
  7. ##后两位数字相同,但与前两位不同
    % j3 a0 P' S" ?7 k( @! ^
  8. ## 4 位数字刚好是一个整数的平方
复制代码
看到这里,新大榭小哥哥心头小鹿乱撞!8 l, t) y9 V7 C7 L* V3 ~" F
  d# Y9 p; a. j: [
想到女神那甜蜜的微笑,仿佛一股清凉的泉水从他心中流过...6 E. T, \9 P# o* R1 B

+ o" }8 f4 _0 a0 p* `, a; G喜悦和躁动涌进了他的心中,心仿佛荡漾在春水里。
+ B* X6 X9 G+ f# w  R
* }1 U; s5 i7 m那颗心乐得快要盛不下蜜糖般的喜悦!!!
7 u0 {. ^% f5 O+ g
0 _" [/ {5 e: u" x; W一看手表,还有 20min,既然如此,只能来撸代码了!- Z0 d: a6 |: c% d8 H7 @
2 j) v  `+ o' N! t2 Z' h5 v
按照女神的要求,其实就是找到一个前两位数相同、后两位数相同且相互间又不同的4位整数。
2 R/ O! v+ i# y) m+ E
" X. `: p! R7 v  K( I4 c然后判断该整数是否是另一个整数的平方!3 `4 n+ t, g: }/ ^3 N& w
3 P% I6 c9 y: E  ^( f* ]
即求一个 4 位数 abcd,满足下面的条件( abcd 均属于[0,9]):

/ ]" g) {/ _% h! a8 {& w1 U
: h7 @- [) @+ o; N/ j 7412_01.jpg
* n4 ]6 Z6 D7 X4 E% ?8 o) g  n" @8 n2 G! w% \6 y' X% `% Y
其中由注释可知,abcd,又各自相等。
6 C9 I" O" I2 M- P/ I6 q* {' h1 t: x: f( ?+ T( w5 X
公示有了,最简单粗暴方式还是用 穷举法,一个一个试,答案很快就会浮出水面!+ j1 R& @3 @# v0 F0 A) X
新大榭此时心中想起一句名言:
! k( X& J  ?3 R* @7 {" C' y
做好流程图,程序立刻出~
首先设计双层循环穷举出所有由前两位数和后两位数组成的四位数。2 j4 O1 D) w+ \3 S$ |: j, _
. P3 I! D1 ]6 o4 f
然后在最内层穷举出所有平方后结果为四位的数,最后判断该数是否符合总条件,符合则打印答案。
9 I3 }$ p- A9 ^4 t
/ n. ]( A/ B8 a0 }& e流程图参上
(点击看大图)6 _3 {& ?$ g4 @7 {& _
. ~' ~$ {8 {) c* i: X
7412_02.jpg 6 e! R9 p( {% H- R2 e
; ~7 |/ o4 ?! T: e
写流程图时新大榭发现找整数时,不一定从1开始,因为女神手机号只能是四位!0 P" p& a/ L7 L: e" z  S
, e; g- N3 X8 D
00xx,这样根本无法满足条件。7 s: D2 S, o% C/ N: w: P0 E
+ C& u0 |5 j& n9 t+ |/ A/ ~) `
既然如此是四位数,那么它的平方根只能是从 3499 之间!(为什么?
: V3 [+ f' e7 C* i# K5 F& R6 u- K/ E7 E1 B* \, l4 U
如果用上一讲的 while 循环来写,代码就是:

& f$ z3 @. `1 r: b8 ?6 ?7 C: z
  1. i = 12 W3 M0 ~2 x# e; i
  2. while i <= 9:' z, B' M5 a" u7 `, ~2 q1 [
  3.     j = 0
    + ?3 H1 |  X3 l  \) u2 _
  4.     while j <= 9:
    / P( Q. {8 v3 r" W/ d3 Z
  5.         if(i != j):2 U" K5 \' {% U8 C# y$ Z- V) z1 q
  6.             k = 1000*i+100*i+10*j+j
    $ f/ A) C5 o$ q! R0 Z
  7.             t = 34  S# \% v4 [7 f; j4 _, R+ K
  8.             while t <= 99:) m' A, M, ^6 ~1 J9 T3 ?6 @2 v7 v
  9.                 if(k == t*t):# q$ a. Z" h8 `/ Q; \8 o$ h
  10.                     print(k)
    / v" f  z+ _/ p; u2 k9 S
  11.                 t += 1
      i6 _) I; m0 X! P5 O
  12.         j += 16 P- i% x2 x% z; M  `( P
  13.     i += 1
复制代码
3 P$ h+ {' D+ j8 e; v! Z
while 循环我们都用了这么久,还可以用更省心的 for 循环噢!
3 ~7 u+ U0 |" m7 Y2 A6 P
( v* L" C; T  b. d将上面的 while 条件以及 +1 条件,统一用 for () in range() 替换。$ `  k% @! o% D) q- [1 l
9 F4 g, i: s5 d% [9 j
所以流程图中所有 while 都可以修改 ,并且最后的 for 循环条件就是 (34,100)
3 N. }! d4 p0 `( o5 v' F$ D
  1. for t in range(34, 100)
复制代码
代码分分钟搞定了,看下结果:+ J3 p1 r# F5 x" Q) b) b

# g9 x. U2 V  I1 z  K8 g+ |7 @3 V- Y4 D* O. f

$ u. l0 m( z& T. [8 `; Z/ H抬手看表,刚刚 20:50,赶紧发短信:
) z9 G, R* k% W) O* F( f. ~2 g( ~" G3 g
女神我们晚上去......

3 Y  f' v. a! ]9 q: z+ l哈哈哈,让我们祝新大榭小哥哥幸福吧~~$ T0 G: D0 u6 t

" V: }+ X  T- @0 w+ K2 g源代码(程序那么简单,先自己动手写!稍后老师附参考答案):
/ r7 q* Y6 O% B) f' D2 Z: X6 F, P
  1. '''2 e  v3 e9 I- f/ m" y
  2. Team: 新大榭7 D/ P4 G$ w4 a6 O& R) t5 L2 ?, {5 f
  3. Author: 张黎斌6 W( [8 v. C. ]. r2 K1 ?/ Z
  4. update: 2021-07-14* h  r# G( f5 i( M' O4 K( K4 C; @" G
  5. Level: A
    0 F8 E6 s/ a( A$ H2 s$ h# e

  6. ( b- y+ D4 q7 O" ], i' R* K8 D
  7. 想和我出去约会吗?! l) c5 p! v1 G9 u! O2 W
  8. 请根据以下线索找出我的手机号1709098XXXX 的后四位
    # i4 P. f: ]4 }5 M

  9. ! F7 D& M/ I/ v& a. X
  10. 线索1:前两位数字相同
    & w  D, e! d* X6 W3 W
  11. 线索2:后两位数字也相同,但与前两位不同
    7 M, b$ M$ ^( }9 l6 Y6 b+ Y
  12. 线索3:这四位数刚好是一个整数的平方
    : @) X6 Y1 U) E
  13. '''0 F  j% r' v1 t/ M0 j% y% n3 Z6 B
  14. for i in range(10):
    9 z' t% m: Y4 O; y1 l- A
  15.     for j in range(10):
    5 l5 I6 V5 ~; H# a  Z- x* G, y7 z
  16.         if i != j:: R; k! K* v& o5 E2 `
  17.             k = 1000*i + 100*i + 10*j + j% ~! q0 y5 y! Q3 h
  18.             for temp in range(34,100):  # 为什么 34<=temp<100 #因为四位数范围为1100~9988- `7 W9 y) p+ V  W- T  p/ x
  19.                 if temp*temp == k:
    6 I  p6 F$ j% f/ o- R6 `
  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 | 显示全部楼层
下面我们来看看新大榭网校学哥学姐的作业答案吧~ 例如:
) `  q* c: h- N7 w5 q; ^9 _3 p
  1. import math
    3 U/ v) [8 U% B0 ]) m* e6 f: b- ~

  2. * s( z7 G6 ]) S% J, }" [1 ?) c
  3. for x in range(1, 10):
    . E  T) V% d& v4 h" ?7 P
  4.     for y in range(10):5 |0 s& }" q; d0 C
  5.         if x != y:
    / B6 h( m( E, }) H
  6.             num = x * 1000 + x * 100 + y * 10 + y8 k2 {, ~, @3 m6 x3 W
  7.             if math.sqrt(num) % 1 == 0:
    ) M" R7 h8 P& {- t
  8.                 print(num)
复制代码
再如:$ e+ f" X8 S( n. ^8 g4 p, m" k
  1. for x in range(10):/ {! p8 `/ r$ Y! i
  2.     for y in range(10):$ g( V. d7 ?6 A5 ~* }  q
  3.         for z in range(32,100):9 Z. j/ N& ^* T, T
  4.             k = int(f'{x}{x}{y}{y}')* r. B% z- u# \2 g8 |! Z
  5.             if x != y and z * z == k:
    1 b5 [. `1 @& l" R6 g* ~
  6.                 print('号码后四位是', k)
复制代码
还有这样的:* o# \  `1 R6 c
  1. for i in range(32,99):7 D. n+ g7 W5 ^* F& c! g
  2.     num = pow(i,2)+ s' u. g- m. p" `( n& n0 \
  3.     if num%10==int(num%100/10) and int(num/1000)==int(num/100)%10 and (num%10)!=int(num/1000):
    5 A( J" v3 D  i
  4.         print(num)
复制代码
还有那样的:  W1 z7 |, \" W" o0 R9 W, j2 K
  1. for i in range(1,10):$ c3 D+ p4 P/ J# w
  2.     for j in range(1,10):
    5 F9 w0 B6 }% j5 H+ X  g
  3.         if i != j and pow(i*1000+i*100+j*10+j, 0.5)%1==0:9 k$ s" e& G3 J
  4.             print(i,i,j,j)
复制代码
你更支持那位学哥学姐呢?欢迎评论区留言~ 下课....
:更多公益课程欢迎注册新大榭论坛在线学习!会员级别越高,福利越多!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-11-2 13:23 , Processed in 0.080268 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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