这是一个有趣的编程引入题:
大家学过Python的话应该知道“天天向上的力量”这个经典的入门编程题,而这道题对博主本人也很有意义,因为这是博主上大学的第一门编程语言讲授课的讲解题目,而刚好这道题也反映出IT行业的一个时刻保持学习状态的特点,在此,博主以这道题为开头、以乔帮主的一句“Stay hungry, stay foolish”与大家共勉
# 一年365天,以第1天的能力为基数,记为1.0,当好好学习时能力值相比前一天提高1%,当没有学习时能力值相比前一天下降1%。问:每天努力和每天放任,一年下来的能力值相差多少
a = pow((1+0.01), 365)
b = pow((1-0.01), 365)
print("天天向上的力量:{:.5f}, 天天向下的力量:{:.5f}".format(a, b))
print("一年下来两者相差:%.10f" % (a-b))
# 一年365天,如果好好学习时能力值比前一天提高x%,当放任时相比前一天下降x%。问:效果相差多少
dayfactor = eval(input("请输入每天努力or放纵的因子:"))
dayup = pow((1 + dayfactor), 365)
daydown = pow((1 - dayfactor), 365)
print("天天向上的结果:{:.5f}, 天天向下的结果:{:.5f}".format(dayup, daydown))
print("一年下来两者相差:%.5f" % (dayup - daydown))
# 一年365天,一周5个工作日,如果每个工作日都很努力,就可以提高1%,仅在周末放松一下,能力值下降1%,问:效果如何
dayfactor = eval(input("请输入每天努力or放纵的因子:"))
dayup = 1.00
for i in range(365):
if i % 7 in [6, 0]:
dayup = dayup * (1 - dayfactor)
else:
dayup = dayup * (1 + dayfactor)
print("向上5天向下2天后一年下累积能力值:{:.2f}".format(dayup))
# 每周工作5天,休息2天,休息日水平下降0.01,问:工作日要努力到什么程度,一年后的水平才与每天努力1%取得的效果一样呢
def dayUp(df):
dayup = 1.0
for i in range(365):
if i % 7 in [0, 6]:
dayup = dayup * (1 - 0.01)
else:
dayup = dayup * (1 + df)
return dayup
dayfactor = 0.01
while(dayUp(dayfactor) < 37.78):
dayfactor += 0.001
print("每天努力的参数是:{:.3f}".format(dayfactor))
# 天天向上续。以7天为周期,连续学习3天能力值不变,从第4天开始至第7天每天能力增长为前一天的1%。如果7天中有1天间断学习,则周期从头开始算。请编写程序回答,如果初始能力值为1,连续学习365天后能力值是多少?
dayup = 1
dayfactor = 0.01
i = 362
dayup = pow((dayup + dayfactor), i)
print("坚持365天下来的力量是:{:.3f}".format(dayup))
# 天天向上续。采用上题的能力增长模型,如果能力初始值为1,固定每10天休息1天,365天后能力值是多少?如果每15天休息1天呢?
def dayUp(days):
dayup = 1.0
dayfactor = 0.01
i = (365 % 10) - 3
dayup = pow((dayup + dayfactor), (days - 4) * 36) * pow((dayup + dayfactor), i)
return dayup
print("当 days=10 时,能力模型的力量是:{}".format(dayUp(10)))
print("当 days=15 时,能力模型的力量是:{}".format(dayUp(15)))
题目一:统计不同字符的个数
# Python:
n=input("请输入一行字符:")
a=b=c=d=0
for i in n:
if ord('a')<=ord(i)<=ord('z') or ord('A')<=ord(i)<=ord('Z'):
a=a+1
elif ord('0')<=ord(i)<=ord('9'):
b=b+1
elif ord(i)==ord(' '):
c=c+1
else:
d=d+1
print("这一行字符中字母的数量是:{},数字的数量是:{},空格数量是:{},其他字符的数量是:{}。".format(a,b,c,d))
题目二:求两个整数的最大公约数
# Python:
def get_greatest_common_divisor_V2(a,b):
big=max(a,b)
small=min(a,b)
if big%small==0:
return small
return get_greatest_common_divisor_V2(big%small,small)
i = get_greatest_common_divisor_V2(4, 10)
print("两数的最大公约数是:{}".format(i))
print("两数的最小公倍数是:{}".format(4 * 10 / i))
题目三:字符串翻转
# Python:
#递归实现字符串翻转
import sys
sys.setrecursionlimit(2000)
def reverse(s):
if s == '':
return s
else:
return reverse(s[1:]) + s[0]
aa = input("请输入一个字符串:")
print(reverse(aa))
题目四:进制转换(以十进制转其他进制为例)
# Python:
# 十进制转二进制
print("(Into binary)Please type an integer:")
a = int(input())
print(bin(a))
# 十进制转八进制
print("(Into octal)Please type an integer:")
b = int(input())
print(oct(b))
# 十进制转十六进制
print("(Into hexadecimal)Please type an integrate:")
c = int(input())
print(hex(c))
// C:
#include<stdio.h>
void convert(int x, int y)
{
if(x > 0)
{
convert(x/y, y);
if(y!=16)
printf("%d", x % y);
else
printf("%x", x % y); // 以十六进制输出
}
}
int main()
{
int x, y;//输入要转换的数值和转化进制数
printf("请输入要转换的十进制整数: ");
scanf("%d", &x);
printf("请输入要转换的进制: ");
scanf("%d", &y);
convert(x,y);
return 0;
}
题目五:回文数判断。设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相同,则n被称为回文数。从键盘上输入一个5位数字,请编写程序这个数是不是回文数
#1、字符串判断
x=input("请输入一个整数:")
if x==x[::-1]:
print("是回文数。")
else:
print("不是回文数。")
#2、颠倒数据后判断
x = int(input("请输入一个整数:"))
if x < 0 or (x % 10 == 0 and x != 0):
print("不是回文数。")
elif not x // 10:
print("是回文数。")
else:
hou = 0
while (x > hou):
hou = hou * 10 + x % 10
x //= 10
if x == hou or x == (hou // 10):
print("是回文数。")
else:
print("不是回文数。")
进阶版:Python面向对象编程
一、时间函数
f = lambda x, y : x + y
f(1, 3)
def vfunc(a, *b):
print(type(b))
for i in b:
a += i
return a
vfunc(1, 2, 3, 4, 5)
from datetime import *
today = datetime.utcnow()
today
二、更新文本进度条
import time
scale = 10
print("----执行开始----")
for i in range(scale + 1):
a, b = "**" * i, "··" * (scale - i)
c = (i / scale) * 100
print("%{:^3.0f}[{}->{}]".format(c, a, b))
time.sleep(0.3)
print("----执行结束----")
#单行更新文本进度条
import time
scale = 50
print("执行开始".center(scale // 2, '-'))
t = time.perf_counter()
for i in range(scale + 1):
a = '*' * i
b = '·' * (scale - i)
c = (i / scale) * 100
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, t), end=' ')
time.sleep(0.05)
print("\n" + "执行结束".center(scale // 2, '-'))
三、检测
try:
alp = "huadudadhjhagdhbx"
index = eval(input("请输入一个整数:"))
print(alp[index])
except NameError:
print("输入错误,请重新输入")
except IndexError:
print("索引值超出范围,请重新输入")
else:
print("没有发生异常")
finally:
print("程序执行完毕")
四、CSV文件的读写
fo = open("/Users/mac/Desktop/picture2016.csv", "r")
ls = []
for line in fo:
line = line.replace("\n", "")
ls.append(line.split(","))
print(ls)
fo.close()
五、田字格的输出
#田字格的输出
n = eval(input("请输入一个奇数:"))
a = "— "
b = "┼"
c = "|"
d = " "
m = n // 2
for i in range(n):
if i in [0,m,n-1]:
print("{0}{1}{0}{1}{0}".format(b, a*(m-1)))
else:
print("{0}{1}{0}{1}{0}".format(c, d*2*(m-1)))