Python代码练习题

1. 对一个列表里的数据进行奇偶数分离

numbers = [12, 37, 5, 42, 8, 3]
even = []
odd = []
while len(numbers) > 0 :
	number = numbers.pop()
	if(number % 2 == 0):
		even.append(number)
	else:
		odd.append(number)
print even
print odd

输出结果:

[8, 42, 12]
[3, 5, 37]

2. 猜一个数是大了还是小了

number = 23
running = True
while running:
	guess = int(raw_input("enter an inter:"))
	if guess == number:
		print 'congratulations, you guessed it.'
		running = False
	elif guess < number:
		print 'no, it is a little higher than that'
	else:
		print 'no, it is a little lower than that'
else:
	print 'the while loop is over'
print 'done'

输出结果:

enter an inter:12
no, it is a little higher than that
enter an inter:25
no, it is a little lower than that
enter an inter:23
congratulations, you guessed it.
the while loop is over
done

3. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

方法一:

#coding=utf-8
d=[]
for a in range(1,5):
    for b in range(1,5):
        for c in range(1,5):
            if (a!=b) and (a!=c) and (c!=b):
                d.append([a,b,c])
print "总数量:", len(d)
print d

方法二:使用Python自带的函数

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

#补充一下

from itertools import permutations

for i in permutations([1, 2, 3, 4], 3):
    k = ''
    for j in range(0, len(i)):
        k = k + str(i[j])
    print (int(k)),

方法三:考虑减少冗余判断和循环,做如下优化;

for i in range(1, 5):
    for j in range(1, 5):
        if (j==i) :
            continue;
        for k in range(1, 5):
            if (k==i or k==j):
                continue;
            print(i,j,k);

4. 题目:企业发放的奖金根据利润提成。利润i

低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;

40万到60万之间时高于40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%,

高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

方法一:使用if...elif...else语句逐一判断

#coding=utf-8
x = int(raw_input("净利润:"))

if x<=100000:
    bonus=x*0.1
    print u"奖金:",bonus,u"元"
elif 100001<x<=200000:
    bonus=10000+(x-100000)*0.075
    print u"奖金:",bonus,u"元"
elif 200001<x<=400000:
    bonus=10000+7500+(x-200000)*0.05
    print u"奖金:",bonus,u"元"
elif 400001<x<=600000:
    bonus=10000+7500+10000+(x-400000)*0.03
    print u"奖金:",bonus,u"元"
elif 600001<x<=1000000:
    bonus=10000+7500+10000+6000+(x-600000)*0.015
    print u"奖金:",bonus,u"元"
elif 600001<x<=1000000:
    bonus=10000+7500+10000+6000+6000+(x-600000)*0.01
    print u"奖金:",bonus,u"元"
净利润:120000
奖金: 11500.0 元

方法二:

# -*- coding: UTF-8 -*-
 
i = int(raw_input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
    if i>arr[idx]:
        r+=(i-arr[idx])*rat[idx]
        print (i-arr[idx])*rat[idx]
        i=arr[idx]
print r

5. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:

假设该数为 x。

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。

7、接下来将 i 的所有数字循环计算即可。

源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for i in range(1,85):
    if 168 % i == 0:
        j = 168 / i;
        if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
            m = (i + j) / 2
            n = (i - j) / 2
            x = n * n - 100
            print(x)

运行结果:

-99
21
261
1581

方法二:最简单易读

#!/usr/bin/python
# -*- coding:utf-8 -*-

t = []
for m in range(168):
    for n in range(m):
        if m**2 - n**2 == 168:
            x = n**2 - 100
            t.append(x)
print('符合条件的整数有:',t )

4. 题目:输入某年某月某日,判断这一天是这一年的第几天?

源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
year = int(raw_input('year:\n'))
month = int(raw_input('month:\n'))
day = int(raw_input('day:\n'))
 
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
    sum = months[month - 1]
else:
    print 'data error'
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print 'it is the %dth day.' % sum

运行结果:

year:
2015
month:
6
day:
7
it is the 158th day.

方法二:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

year=int(raw_input("年:\n"))
month=int(raw_input("月:\n"))
day=int(raw_input("日:\n"))
months1=[0,31,60,91,121,152,182,213,244,274,305,335,366] #闰年
months2=[0,31,59,90,120,151,181,212,243,273,304,334,365] #平年

if ((year%4==0)and(year%100!=0)) or((year%100==0)and(year%400==0)):
    Dth=months1[month-1]+day
else:
    Dth=months2[month-1]+day
print "是该年的第%d天"%Dth

方法三:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 输入任意年月日,知道是改年第几天

p = [31,28,31,30,31,30,31,31,30,31,30,31] # 平年
w = [31,29,31,30,31,30,31,31,30,31,30,31] # 闰年

year =int(raw_input("年:\n"))
month =int(raw_input("月:\n"))
day =int(raw_input("日:\n"))

# 判断闰年,平年

if year % 100 == 0:
    if year % 400 == 0:
        d=w
    else:
        d=p
else:
    if year % 4 == 0:
        d=w
    else:
        d=p

# 计算天数

days = sum(d[0:month-1])+day
print "%d.%d.%d是%d年的第%s天。"%(year,month,day,year,days)

方法四:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日期:'))
total = 0
if year%4 == 0:
    days = 29
else:
    days = 28
if year%4 == 0:
    print year, '年是润年,2月有', days, '天!'
else:
    print year, '年是平年,2月有', days, '天!'
if month <= 1:
    total = day
elif month == 2:
    total = 31 + day
elif month == 9 or month == 11:
    total = (month - 2) * 30 + days + month/2 + day + 1
else:
    total = (month - 2) * 30 + days + month/2 + day
print year, '年',month, '月', day, '日,是这一年的第', total, '天!'

方法五:

#!/usr/bin/python

def isLeapYear(a):
    if (0 == a%4 or 0 == a%400) and 0 != a%100 :
        return 1
    else:
        return 0
dict = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
a = int(input("Input year:"))
b = int(input("Input month:"))
c = int(input("Input day:"))
m = 0
k = isLeapYear(a)
for i in range(1,b):
    m = m + dict[i]
m = m + isLeapYear(a) + c

print(m)

方法六:

#!/usr/bin/env python
#coding:utf-8

import time
import sys

reload(sys)
sys.setdefaultencoding('utf-8')  # 设置 'utf-8'  
a = raw_input("输入时间(格式如:2017-04-04):")
t = time.strptime(a,"%Y-%m-%d")
print time.strftime("今年的第%j天",t).decode('utf-8')

方法七:

#! /usr/bin/env python
# coding:utf-8

import time

D=raw_input("请输入年份,格式如XXXX-XX-XX:")
d=time.strptime( D,'%Y-%m-%d').tm_yday
print "the {} day of this year!" .format(d)

方法八:通过计算输入的日期与相应年份1月1日相差的秒数,然后除以每天的秒数3600*24,即可得到输入日期的天数

#!/usr/bin/env python3

import time

def datecount(date):
    date0=date[0:4]+"-01-01"
    datet=time.strptime(date,"%Y-%m-%d")     #将输入的字符串转化为时间元组
    date0t=time.strptime(date0,"%Y-%m-%d")  
    dates=time.mktime(datet)                #将时间元组转化为时间戳
    date0s=time.mktime(date0t)
    count=(dates-date0s)/(3600*24)          #输入日期的时间戳减当前年份0101的时间戳除以每天秒数
    return count+1

a=input("请输入日期:格式如2017-06-16\n")
print("{}是{}年第{}天".format(a,a[0:4],int(datecount(a))))

方法九:通过输入时间点的unix时间戳和输入年份首日的Unix时间戳之间的差,来计算经过的时间

#coding=utf-8
import time
print "Please Enter full number just like 02 01 03"
y = int(raw_input('Enter the year:'))  #分别输入年月日
m = int(raw_input('Enter the month:'))
d = int(raw_input('Enter the day:'))
a = (y,m,d,00,00,00,00,00,00)  #要求长度为9
b = (y,01,01,00,00,00,00,00,00)  #输入年份的第一天
timestampa = time.mktime(a)      #两个都转换为Unix时间戳,即1970.1.1到现在经过的秒数
timestampb = time.mktime(b)
timec = int((timestampa - timestampb)/(3600*24))  #输入的时间戳减去年份首天的时间戳等于经过的秒数,再换算成天,取整
print("There are {} days goes by!".format(timec))

5. 题目:输入三个整数x,y,z,请把这三个数由小到大输出。

源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
l = []
for i in range(3):
    x = int(raw_input('integer:\n'))
    l.append(x)
l.sort()
print l

运行结果:

integer:
8
integer:
5
integer:
6
[5, 6, 8]

方法二:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

x = int(raw_input("x:"))
y = int(raw_input("y:"))
z = int(raw_input("z:"))
a = {"x":x,"y":y,"z":z}
print '--------分割线--------'
for w in sorted(a, key=a.get):
    print w, a[w]

运行结果:

x:5
y:2
z:8
--------分割线--------
y 2
x 5
z 8

方法三:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

a=[1,3,5,2,4,5,7]

n=len(a)

for i in range(0,n):
  for j in range(i,n) :
     if (a[i] >= a[j] ):
         tmp =a[i]
         a[i]=a[j]
         a[j]=tmp

print a

方法四:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

x= raw_input("int1:")
y= raw_input("int2:")
Max = max(x,y)
Min = min(x,y)
z= raw_input("int3:")
if z > Max :
    print Min,Max,z
elif z < Min :
    print z,Min,Max
else :
    print Min,z,Max

方法五:Python3.x 版本下使用利用冒泡排序方法:

#!/usr/bin/env python3

# 利用冒泡排序方法
def Sort(list):
    n = len(list)
    for i in range(1, n):
        # 一次次的将最大的学出来
        for j in range(1, n - i + 1):
            if list[j - 1] > list[j]:
                list[j - 1], list[j] = list[j], list[j - 1]
            # 打印排序过程
            print(list)
    for i in range(0, n):
        print(list[i])

# 读入数据
def inputData():
    list_first = []
    while True:
        a = input("please input num:".strip())
        if len(a) == 0:
            return list_first
        else:
            list_first.append(int(a))

if __name__ == '__main__':
    lt = inputData()
    print(lt)
    Sort(lt)

方法六:使用 列表 sort=,可接受参数 reverse,默认为布尔值 false,按升序排序,设置为 true 则按降序排序

#!/usr/bin/python
# -*- coding: UTF-8 -*-

x = int(input('x='))
y = int(input('y='))
z = int(input('z='))
num = [x, y, z]
num.sort()          # 对列表进行升序排序
print '这三个数由小到大的顺序为:',num
rnum = [x, y, z]                  # 对列表进行降序排序
rnum.sort(reverse=True)
print '这三个数由大到小的顺序为:',rnum

方法七:

#!/usr/bin/env python
#coding:utf-8

D=raw_input("请输入三个数字,格式如 'a,b,c':")
li=D.split(",")
li2=[int(i) for i in li]
li2.sort()
print li2

方法八:对输入类型进行了控制,如果输入错误,就提示用户,让用户再次输入,直到正确输入整数为止。

#!/usr/bin/env python
#coding:utf-8
#输入三个整数x,y,z,请把这三个数由小到大输出。
while 1:
    try:
        x = int(input("plz input x: "))
        y = int(input("plz input y: "))
        z = int(input("plz input z: "))
        list1 = [x, y, z]
        print(sorted(list1))
        break
    except:
        print("请输入整数")

方法九:

#! /usr/bin/python
# -*- coding:UTF-8 -*-
a = int(raw_input("请输入:"))
b = int(raw_input("请输入:"))
c = int(raw_input("请输入:"))
if a>b and a>c:
    x = a
    a = c
elif b>a and b>c:
    x = b
    b = c
else:
    x = c
if a>b:
    print b,a,x
else:
    print a,b,x

方法十:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

x = int(raw_input('x->'))
y = int(raw_input('y->'))
z = int(raw_input('z->'))
arr = [x,y,z]
for i in range (0,3):
    for o in range (0,3):
        for p in range (0,3):
            if arr[i] > arr[o] > arr[p]:
                print arr[i],arr[o],arr[p]

方法十一:

print(sorted([int(input("enter a integer: ")) for x in range(3)]))

方法十二:冒泡排序

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#冒泡排序
a = [int(i) for i in raw_input("请输入:").split()]
m = len(a)
while m!=1:
    for i in range(m-1):
        if a[i]>a[i+1]:
            x = a[i]
            a[i] = a[i+1]
            a[i+1] = x
    m -= 1
print a

方法十三:列表sort

#!/usr/bin/python
# -*- coding: UTF-8 -*-

l = [int(i) for i in raw_input("请输入: ").split()]
l.sort()
print l

猜你喜欢

转载自blog.csdn.net/qq_39362996/article/details/80855410