码迷,mamicode.com
首页 > 其他好文 > 详细

判断和循环

时间:2018-03-25 17:01:42      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:判断循环

1、打印100以内的斐波那契数列(这个数列从第3项开始,每一项都等于前两项之和)

(1) 第一次实现:

a = 1
b = 1
sum = a + b
print(a)
print(b)
print(sum)
for j in range(i):
    b = sum - b
    sum = sum + b
    for i in range(1,101):
        if i == sum:
            print(i) 

(2)第二次实现:

a = 1
b = 1
print(a)
print(b)
for i in range(1,101):
    if i == a + b:
        print(i)
        a = b
        b = i

(3)第三次实现:

a = 0
b = 1
c = 1
while c:
    c = a + b
    if c > 100:
        break
    print(c)
    a = b
    b = c

(4)第四次实现:

a = 0
b = 1
while b < 100:
    print(b)
    a,b=b,a+b   # a = b , b = a + b

2、求斐波那契数列第101项

(1)第一次实现:

a = 1
b = 1
sum = a + b
count = 0
for j in range(102):
    b = sum - b
    sum = sum + b
    count += 1
    if count == 98:
        print(sum)

(2)第二次实现:

a = 1
b = 1
count = 2
while True:
    sum = a + b
    a = b
    b = sum
    count += 1
    if count == 101:
        break
print(sum)

(3)第三次实现:

a = 0
b = 1
count = 0
while True:
    a,b=b,a+b
    count += 1
    if count == 100:
        print(b)
        break

(4)第四次实现:

a = 0
b = 1
count = 0
while True:
    c = a + b
    count += 1
    a = b
    b = c
    if count == 100:
        print(c)
        break

(5)第五次实现:

a = 1
b = 1
for count in range(99):
    a,b=b,a+b
else:
    print(b)

3、打印一个边长为n的正方形

(1)第一次实现:

a = int(input("请输入边长长度:"))
print(a*"*")
for i in range(a-2):
    print("*"+(a-2)*" "+"*")
print(a*"*")

(2)优化实现:

n =int(input(">>>"))
for i in range(n):
    if i == 0 or i == n-1:
        print(n*"*")
    else:
        print("*"+" "*(n-2)+"*")

4、求1到5阶乘之和

(1)第一次实现:重复进行阶乘的累加,效率不高

n = int(input(">>>"))
sum = 0
for i in range(1,n+1):
    tmp = 1
    for j in range(1,i+1):
        tmp *= j
    sum += tmp
print(sum)

(2)第二次实现:

n = int(input("please input number:"))
c = 1
sum = 0
for i in range(1,n+1):
    c = i * c
    sum += c
print(sum)

5、给一个数,判断它是否是素数(质数)一个大于1的自然数只能被1和它本身整除

避开3,5,10,2的倍数,能被这些数整除的都不是质数
从2到n的开平方,以外的数都不用去计算
(1)第一次实现:

num = int(input(">>>"))
for i in range(2,num):
    if num%i == 0:
        print("这不是一个素数")
        break
else:
    print("这是一个素数")

(2)第二次实现:

num = int(input(">>>"))
for i in range(2,int((num**0.5)+1)):
    if num % i == 0:
        print("This is not a prime number")
        break
else:
    print("This is a prime number")

6、打印菱形






  • (1)第一次实现:

    a = 3
    b = 1
    for i in range(4):
    if b == 1:
        print(a*" "+b*"*"+a*" ")
    elif b == 3:
        print(a*" "+b*"*"+a*" ")
    elif b == 5:
        print(a*" "+b*"*"+a*" ")
    elif b == 7:
        print(a*" "+b*"*"+a*" ")
    a = a - 1
    b = b + 2
    for j in range(4):
    a += 1
    b -= 2
    if b == 5:
        print(a*" "+b*"*"+a*" ")
    elif b == 3:
        print(a*" "+b*"*"+a*" ")
    elif b == 1:
        print(a*" "+b*"*"+a*" ")

    (2)第二次实现:

    n = 7
    for i in range(1,n+1,2):
    a = int((n - i)/2)
    print(a*" "+i*"*"+a*" ")
    for i in range(5,0,-2):
    a = int((n - i)/2)
    print(a*" "+i*"*"+a*" ")

    (3)第三次实现:对称性

    n = int(input(">>>"))
    for i in range(-n//2,n//2+1):
    if i <= 0:
        print(-(i)*" "+"*"*(n+i*2) )
    else:
        print(i*" "+"*"*(n-i*2))

    可以写成三元运算符:

    n = int(input(">>>"))
    for i in range(-n//2,n//2+1):
    print(-(i)*" "+"*"*(n+i*2)) if i <= 0 else print(i*" "+"*"*(n-i*2))

    (4)第四次实现:abs()取绝对值

    n = int(input(">>>"))
    for i in range(-n//2,n//2+1):
    print(abs(i)*" "+"*"*(n-2*abs(i)))

    (5)第五次实现:

    n =int(input(">>>"))
    a = n//2+1
    for i in range(n):
    i += 1
    if i<a:
        x = a - i
    else:
        x = i - a
    y = n - x*2
    print(" "*x+"*"*y)

    (6)第六次实现:考虑偶数打印的问题

    num = int(input(">>>"))
    if not num%2:
    num += 1
    b = num // 2
    for i in range(-b,b+1):
    print(" "*abs(i)+"*"*(num-2*abs(i)))

    (7)第七种实现:考虑偶数的问题

    while True:
    num = int(input("Please enter an odd number,Otherwise re-enter!"))
    if num % 2 !=0:
        break
    for i in range(-num//2,num//2+1):
    print(" "*abs(i)+"*"*(num-2*abs(i)))

    7、打印九九乘法表

    (1)第一次实现:

    for i in range(1,10):
    for j in range(1,i+1):
        print(j,"x",i,"=",i*j,"\t",end="")
    print()

    (2)第二次实现:

    for i in range(1,10):
    for j in range(1,i+1):
            print("{}*{}={}\t".format(j,i,i*j),end="")
    print()

    (3)第三次实现:

    b = 1
    while b:
    for i in range(1,b+1):
        print("{}*{}={}\t".format(i,b,i*b),end="")
    print()
    b += 1
    if b == 10:
        break

    (4)第四次实现:将每一行的空格数合成一样的

    for i in range(1,10):
    for j in range(1,i+1):
        if j>1 and j*i < 10:
            print("{}*{}={}".format(j,i,i*j),end="     ")
        else:
            print("{}*{}={}".format(j,i,i*j),end="    ")
    print()

    8、求10万内的所有素数

    (1)第一次实现:效率及其之差

    import datetime
    start = datetime.datetime.now()
    count = 0
    for i in range(2,100001):
    for j in range(2,i):
        if i!=j:
            if i%j == 0:
                break
    else:
        #print(i,"\t",end="")
        count += 1
    end = (datetime.datetime.now()-start).total_seconds()
    print(end)
    print(count)

    时间:139.644859
    (2)第二次实现:

    import datetime
    start = datetime.datetime.now()
    count = 0
    for i in range(2,100001):
    for j in range(2,int((i**0.5)+1)):
            if i%j == 0:
                break
    else:
        #print(i,"\t",end="")
        count += 1
    end = (datetime.datetime.now()-start).total_seconds()
    print(end)
    print(count)

    时间:0.552862``
    (3)第三次实现:

    import datetime
    start = datetime.datetime.now()
    count = 1
    #print(2,"\t",end="")
    for i in range(3,100001,2):
    for j in range(2,int((i**0.5)+1)):
            if i%j == 0:
                break
    else:
        #print(i,"\t",end="")
        count += 1
    end = (datetime.datetime.now()-start).total_seconds()
    print(end)
    print(count)

    时间:0.490323
    (4)第四次实现:

    import datetime
    start = datetime.datetime.now()
    count = 1
    #print(2,end="\t")
    for i in range(3,100001,2):
    if i > 10 and i % 10 == 5:# 在所有大于10的质数中,个位数只有1,3,7,9
        continue
    for j in range(3,int(i**0.5+1),2):
        if i % j == 0:
            break
    else:
        count += 1
        #print(i,end="\t")
    end = (datetime.datetime.now() - start).total_seconds()
    print(end)
    print(count)

    时间:0.285051
    (5)第五次实现:考虑到与6相邻的性质

    import datetime
    start = datetime.datetime.now()
    num = 100000
    count = 2 # 2和3这两个质数先算进去
    for i in range(5,num,2):
    if i%6 != 1 and i%6 != 5:
        continue
    for j in range(5,int(i**0.5)+1,2):
        if i % j == 0:
            break
    else:
        count += 1
        #print(i)
    end = (datetime.datetime.now()-start).total_seconds()
    print(end)
    print(count)

    时间:0.283728

    9、 输入n个数,求每次输入后的算术平均数

    (1)第一次实现:

    i = 0
    sum = 0
    while True:
    num = int(input("please input a number:"))
    sum +=  num
    i += 1
    a = input("continue?(Y/N)")
    if a == "N":
        average = sum / i
        print(average)
        break

    (2)第二次实现:

    count = 0
    sum = 0
    while True:
    num = int(input(">>>"))
    if not num:
        break
    sum += num
    count += 1
    print(sum/count)

    (3)第三次实现:

    sum = 0
    count = 0
    while True:
    num = input("please input a number,quit enter!")
    if num == "":
        break
    else:
        sum += int(num)
        count += 1
        print(sum/count)

    10、打印闪电

    (1) 第一次实现:

    b = 3
    for i in range(1,4):
    print(b*" "+i*"*")
    b -= 1
    print(7*"*")
    for i in range(3,0,-1):
    print(3*" "+i*"*")

    (2)第二次实现:

    n = int(input(">>>"))
    a = n // 2
    for i in range(-a,a+1):
    if i < 0:
        print(-i*" "+"*"*(n-a+i))
    elif i == 0:
        print(n*"*")
    else:
        print(a*" "+"*"*(n-a-i))

    (3)第三次实现:

    n = int(input(">>>")) 
    a = n // 2
    for i in range(-a,a+1):
    if i < 0:
        print(" "*abs(i)+"*"*((a+1)+i))
    elif i > 0:
        print(" "*a+"*"*((a+1)-i))
    else:
        print(n*"*")

    (4)第四次实现:

    num = int(input(">>>"))
    n = num // 2
    for i in range(n,-(n+1),-1):
    if i > 0:
        a = i
    else:
        a = n
    if i == 0:
        print(num*"*")
    else:
        print(" "*a+"*"*((n+1)-abs(i)))

    11、猴子吃桃问题

    猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第十天早上在想吃时,就只剩一个桃子了.求第一天共摘了多少个桃子?

    n = 1
    for i in range(1,10):
    n = 2*(n+1)
    print(n)

    12、给一不超过5位的数,判断其有几位

    (1) 第一次实现:

    a=int(input(">>>"))
    if a<0:
    print("输入格式不正确,请输入一个不超过5位的数")
    elif a<100000:
    if a<10:
        num
    elif a<100:
        print("是一个2位数")
    elif a<1000:
        print("是一个3位数")
    elif a<10000:
        print("是一个4位数")
    else:
        print("是一个5位数")
    else:
    print("请输入一个不超过5位的数")

    (2)优化实现1:

    num = int(input(">>>"))
    count = 0
    while True:
    num = num // 10
    count += 1
    if num == 0:
        break
    print(count)

    (3)优化实现2:折半查找

    num = int(input("Please enter a number to judge:"))
    if num >= 1000:
    if num >= 10000:
        print("five digits")
    else:
        print("four digits")
    else:
    if num >= 100:
        print("three digits")
    elif num >= 10:
        print("two digits")
    elif num >= 0:
        print("one digit")
    else:
        print("The negative number does not support judgment for a while. Please try again:")

    13、将10以内的数倒序打印

    (1)第一次实现:

    for i in range(10,0,-1):
    print(i)

    14、打印10以内的偶数

    (1)第一次实现:

    for i in range(10):
    if i % 2 != 0:
        continue
    print(i)

    (2)优化实现1:

    for i in range(10):
    if i % 2 == 0:
        print(i)

    (3)优化实现2:

    for i in range(2,10,2):
    print(i)

    15、倒序打印10以内的偶数

    for i in range(10,0,-2):
    print(i)

    16、给定一个5位数,判断其有几位,并从万位依次打印到个位

    (1)第一次实现:

    num = 54321
    digits = 10000
    count = 0
    for i in  range(5):
    print(num // digits)
    num = num % digits
    digits = digits // 10
    count += 1
    print(count)

    (2)优化实现

    num = int(input(">>>"))
    if num > 100000:
    print("请输入一个5位以内的数!")
    elif num >=1000:
    if num >=10000:
        val = 5
    else:
        val = 4
    elif num > 0:
    if num >=100:
        val = 3
    elif num > 10:
        val = 2
    else:
        val = 1
    else:
    print("请不要输入负数!")
    print(val)
    for i in range(val,0,-1):
    print(num // 10**(i-1))
    num = num % (10**(i-1))

    17、给定一个半径,求圆的周长和面积

    (1)第一次实现:

    r = int(input(">>"))
    p = 3.14
    s = p * (r ** 2)
    print(s)
    c = 2 * p * r
    print(c)

    (2)优化实现:

    r = int(input(">>>"))
    print("s = " + str(3.14 * r * r))
    print("c = " + str(2 * 3.14 * r))

    18、输入两个数,升序打印

    (1)第一次实现:

    num1 = int(input())
    num2 = int(input())
    if num1 > num2:
    print(num1,num2)
    else:
    print(num2,num1)

    在python中没有三目运算符,但是提供了三元表达式:
    真值 if条件 else 假值
    (2)优化实现:

    num1 = int(input())
    num2 = int(input())
    print(num1,num2) if num1 > num2 else print(num2,num1)

    19、输入若干个整数,打印出最大值

    (1)第一次实现:

    newNum = 0
    while True:
    num = int(input(">>>"))
    if num > newNum:
        newNum = num
    prompt = input("continue?(Y/N)")
    if prompt == "N":
        break
    print(newNum)

    (2)第二次实现:

    num1 = int(input("please input first number:"))
    n = int(input("You want to compare it several times."))
    for i in range(n):
    num2 = int(input("please input second number:"))
    if num2 > num1:
        num1 = num2 #将第一次比较后大的值给num1,依次输入,每次num1中存放的都是最大的值
    print("max number is {}".format(num1))

    (3)第三次实现:

    x = int(input(">>>"))
    z = 0
    for i in range(x):
    y = int(input(">>>"))
    if not z: #第一次非0进入语句进行执行,将y的值赋值给z,这时z的值就不在是0,第二次进入非真为0,if第一个判断就不在执行,进行else的判断,将最大值放到z中。
        z = y
    elif y > z:
        z = y
    print(z)

    (4)第四次实现:

    num1 = int(input("please input first number:"))
    max = 0
    while True:
    num2 = input("please input second number,exit press enter!")
    if num2:
        num2 = int(num2)
        if max < num2:
            max = num2
    else:
        break
    print("max is",max)

    20、求100以内所有奇数的和

    sum = 0
    for i in range(1,101,2):
    sum += i
    print("add =",sum)

    21、打印右对齐的九九乘法表

    (1)第一次实现:

    for i in range(1,10):
    print(" "*7*(i-1),end="")
    for j in range(i,10):
        flog = i*j
        if flog < 10:
            end = "  "
        else:
            end = " "
        print(str(j) + "*" + str(i) + "=" + str(j*i),end = end)
    print()

    (2)第二次实现:

    for i in range(1,10):
    s = ""
    for j in range(i,10):
        s += "{}x{}={:<3} ".format(i,j,i*j)
    print("{:>78}".format(s))

    (3)第三次实现:将前三列的空格数和后面的保持一致

    for i in range(1,10):
    s = ""
    for j in range(i,10):
        if j <= 3:
            s += "{}x{}={:<2} ".format(i,j,i*j)
        else:
            s += "{}x{}={:<3} ".format(i,j,i*j)  # c风格:‘%d*%d=%2d ‘%(i,j,i*j)
    print("{:>80}".format(s))

    (4)第四次实现:也可以将三元表达式放在format函数中

    for i in range(1,10):
    s = ""
    for j in range(i,10):
        s += "{}x{}={:<{}} ".format(i,j,i*j,2 if j<=3 else 3)
    print("{:>80}".format(s))

    22、打印对顶三角形

    n = int(input(">>>"))
    n = n // 2
    for i in range(-n,n+1):
    print(" "*(n-abs(i))+"*"*(abs(i)*2+1))

判断和循环

标签:判断循环

原文地址:http://blog.51cto.com/13502869/2090898

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!