编程语言入门经典100例【Python版】11-20

上一篇 / 下一篇  2014-12-20 17:54:43 / 个人分类:python100例

   这两天学了一点,100例也写到了32例,随着写的学习,有使用到了递归还有是C中的for循环会用python的for循环来写了,而不是前10例中的用while来达到目的。另外还有是对range的了解,知道了range(1,5)=[1,2,3,4]没有尾数的5,在for循环的时候很容易用错。

以下是11-20(全部运行通过):

#【程序11

#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

#   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

#2.程序源代码:

f1 = f2 = f3 = 1

i = 1

n = int(raw_input('plz enter month'))

if n == 1:

   print f1

elif n == 2:

   print f1

   print f2

else:

   print f1

  

   while i < n:

       print f3

       f3 = f1 + f2

       f1 = f2

       f2 = f3        

       i = i + 1

print 'progr'


#【程序12

#题目:判断101-200之间有多少个素数,并输出所有素数。

#1.程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,

#      则表明此数不是素数,反之是素数。      

#2.程序源代码:

 

import math

n = 100

h = 0

while n < 200:

   flag = 1

   n = n + 1

   i = 1

   while i <= math.sqrt(n+1):

       i = i + 1

       if n % i == 0:

           flag = 0

           break

   if flag :

       print 'num: ',n

       h = h + 1           

print 'total: ',h

 

#【程序13

#题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数

#   本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

#1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

#2.程序源代码:

 

n = 100

while n < 1000:   

   i = n/100

   j = n/10%10

   k = n%10

   if i*100+j*10+k == i*i*i+j*j*j+k*k*k:

       print n

   n = n + 1

 

#【程序14

#题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

#程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

#(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

#(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,

# 重复执行第一步。

#(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

#2.程序源代码

 

n = int(raw_input('plz '))

i = 1

while i <= n:

   i = i + 1

  # print 'i',i

   while n != i:        

       if n%i == 0:

           print ' ',i,

           n = n/i

          # print 'n',n

       else:

           break

 

print ' ',n

 

#【程序15

#题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

# 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

# 2.程序源代码:

 

s = int(raw_input('plz '))

if s>=90:

   grade = 'A'

elif s>=60:

   grade = 'B'

else:

   grade = 'C'

print s,'belongs to ',grade


#【程序16

#题目:输入两个正整数mn,求其最大公约数和最小公倍数。

#1.程序分析:利用辗除法。

#2.程序源代码:

 

n1 = int(raw_input('plz n1: '))

n2 = int(raw_input('plz n2: '))

if n1:

   temp = n1

   n1 = n2

   n2 = temp

a = n1

b = n2

while b != 0:

   temp = a%b

   a = b

   b = temp

print a

print n1*n2/a

 

#【程序17

#题目:输入一行字符,分别统计出其中英文字母、空

#格、数字和其它字符的个数。

#程序分析:利用while语句,条件为输入的字符不为'\n'.

#程序源代码:


#主要是调用了str的函数判断是不是符合要求

li = raw_input('plz enter string:')

zm = 0

kg = 0

sz = 0

qt = 0

i = 0

while i <= len(li)-1:  

   s = li[i]

   i = i+1

   if s.isspace():

       kg = kg+1

   if s.isalpha():

       zm = zm+1

   if s.isdigit():

       sz = sz + 1

qt = len(li)-zm-kg-sz

print 'zm',zm,'kg',kg,'sz',sz,'qt',qt

 

 

#看这么多变量不爽用列表试了试

li = raw_input('plz enter string:')

k = [0,0,0,0]

i = 0

while i <= len(li)-1:  

   s = li[i]

   i = i+1

   if s.isspace():

       k[1] = k[1]+1

   if s.isalpha():

       k[2] = k[2]+1

   if s.isdigit():

       k[3] = k[3] + 1

k[0] = len(li)-k[1]-k[2]-k[3]

print 'zm',k[2],'kg',k[1],'sz',k[3],'qt',k[0]

 

 

#【程序18

#题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数

#字。例如2+22+222+2222+22222(此时共有5个数相加),几个数

#相加有键盘控制。

#程序分析:关键是计算出每一项的值。

#程序源代码:


n = int(raw_input('plz enter numbers:'))  

a = int(raw_input('plz enter the a:'))

sum1 = 0   #2+22+222 = 200*1+22*2+2*3

m = n  

while n > 0 :

   n = n-1

   sum1 = sum1 + a*(10**n)*(m-n) 

print sum1

 

 

#【程序19

#题目:一个数如果恰好等于它的因子之和,这个数

#就称为“完数”。例如6=123.编程找出1000以内的所有完数。

#程序分析:请参照程序<--上页程序14.

#程序源代码:

 

li =range(0,100)

for j in range(2,1000):    #循环到1000     

   n = -1

   s = j

   for i in range(1,j):   #因子不大于该数

       if j%i == 0:

           s = s-i

           n = n+1

           li[n] = i     #用列表放数的因子   

   if s==0:

       print j,'is wanshu'

       for k in range(0,n):

           print li[k],

       print ''

 

#【程序20

#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;

#再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#程序分析:见下面注释

#程序源代码:


s= 100

su = 100    #第一次只有一个来回100

for j in range(1,11):    #k = range(2,8)=[2, 3, 4, 5, 6, 7]  

   s = s/2.0

   su = su + s*2   #每次落地是来回两次 

print s

print su



TAG: Python python python100

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-16  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 10429
  • 日志数: 4
  • 建立时间: 2014-10-29
  • 更新时间: 2015-01-22

RSS订阅

Open Toolbar