python学习_循环语句

python学习_循环语句

第1关:斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,每个月的兔子数形成的数为斐波那契额数列 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

函数实现

x=eval(input("")) 
#代码开始
def fb(x) :
    if x == 1 or x == 2:
        return 1
    return fb(x - 1) + fb(x - 2)
print(fb(x))

for循环实现

a=1
b=1
y=1
for i in range(2,x):
    y=a+b
    a=b
    b=y
print(y)

第2关:统计一段英文语句中的单词数和句子数

要统计词语的数量,则统计当前字符是大写或小写英文字母,而前一个字符是空格或标点符号(句号(.)惊叹号(!)问号(?)逗号(,)分号(;)双引号(""))等的数目。 例如,输入英文短语如下,统计结果为57个单词和3个句子。 提示:对字符串的每个字符ch循环,若ch是句号(.)惊叹号(!)问号(?)时,则表示句子数的变量加一。若ch是大小写英文字母,且前一个字符是指定标点时,表示词语数的变量加一。前一个字符可以用一个变量保存,只要在循环语句的最后将ch赋值给该变量即可。提示:对于第一个字符,可以设置其前一个字符为空格。

Python isalpha()方法

str.isalpha()
#如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
#例子
str = "runoob";
print str.isalpha();

str = "runoob菜鸟教程";
print str.isalpha();

str = "this is string example....wow!!!";
print str.isalpha();
x=input()
y=" "
cy=0
jz=0
for a in x:
    if(a=="." or a=="!" or a=="?"):
        jz=jz+1
    elif(a.isalpha()and((y==" " or y=="." or y=="!" or y=="?" or y=="," or y==";" or y== '"' ))):
        cy=cy+1
    y=a
print(f"单词{cy}句子{jz}")

第3关:密码判断

打开文件

=open(<文件名>,<打开模式>)

打开一个文件,并创建一个file类对象 文件名在当前文件夹下,直接输入文字的名字 当以读的方式打开文件时,设置打开模式为”r”

遍历文件

遍历结构是文件 遍历文件fi的每一行 for line in fi: <语句块>
line是每行读出的字符串

注意:line字符串的结尾为换行符'\n'

截取字符串

str.find(指定字符)返回指定字符在字符串str的索引pos str[:pos]是该字符串中该字符以前的子串 str[pos+1:]是该字符串中该字符以后的子串

编程要求

根据提示,在右侧编辑器补充代码,实现检测用户名和密码的功能。 注意:str.strip('\n')去掉字符串首尾的换行符

代码测试

测试输入: 用户名张三 密码129876543

预期输出: 用户名或密码错误

测试输入: 用户名甲乙 密码11111111

预期输出: 密码正确

测试输入: 用户名刘好 密码129876543

预期输出: 用户名或密码错误

f1=open("sy5/密码.txt","r",encoding="utf-8")
x=input("用户名")
y=input("密码")
#代码开始
t =False
for line in f1:
    line=line.strip('\n')
    p=line.find(',')
    if(x==line[:p]and y==line[p+1:]):
        t=True
if(t):
    print("密码正确")
else:
    print("用户名或密码错误")
#代码结束

第4关:通过数列求自然常数e

e≈1+1/(1!)+1/(2!)+1/(3!)+… +1/(n!)

s=1
i = 1
n = 1
e = 1
while 1 / n >= pow(10, -7):
        n *= i
        e += 1 / n
        i += 1
print(f"e值为{e:.8}"

第5关:双倍余额递减法计算固定资产折旧

双倍余额递减法是在不考虑固定资产预计净残值的情况下,根据每年年初固定资产净值和双倍的直线法折旧率计算固定资产折旧额的一种方法。它的基本规则是:以固定资产使用年数倒数的2倍作为它的年折旧率,以每年年初的固定资产账面余额作为每年折旧的计算基数,但由于在固定资产折旧的初期和中期时不考虑净残值对折旧的影响,为了防止净残值被提前一起折旧,因此现行会计制度规定,在固定资产使用的最后两年中,折旧计算方法改为平均年限法,即在最后两年将固定资产的账面余额减去净残值后的金额除以2作为最后两年的应计提的折旧。

yj=eval(input("原价"))
cz=eval(input("残值"))
n=eval(input("年限"))
x=2/n
y=0
z=0
for i in range(1,n-1):
    y=(yj-z)*x
    z=z+y
    print(f"第{i:2d}年折旧{y:.2f}")
for i in range(n-1,n+1):
        Y=(yj-z-cz)/2
        print(f"第{i:2d}年折旧{Y:.2f}")

第6关:销售统计

本关任务:循环输入商品编号、数量和价格,进行累加。 只到输入商品编号为0000为止。 输出商品种类、数量总计和金额总计。

spbh=input("输入商品代码")
s=0
c=0
sl=0
#代码开始
while spbh!='0000':
    c=c+1
    a=input("输入商品价格")
    b=input("输入商品数量")
    sl=sl+int(b)
    s=s+int(a)*int(b)
    spbh=input("输入商品代码")
#代码结束
print(f"商品种类{c}数量总计{sl}金额总计{s:.2f}")

七:任务:计算给定列表中所有正数的和。


list_num = [-5, 0, 5, 8, 101, -16, -15, 56, 20, -32, 20, 0, -19, 50, 100, 205, 302, 1901, 302]

# 使用continue语句计算给定列表中所有正数的和,按照输出格式打印结果
sum=0
a=len(list_num)
for i in range (1,a):
    if list_num[i]<=0:
        continue
    else:
        sum+=list_num[i]
print(f"正数和为{sum}")

八:模仿银行输入的密码

任务:模仿银行输入的密码出错 3 次,而锁定账户(三次重新输入密码的机会),请编写代码实现该功能。密码通过 input 函数获取。正确密码为"123"。如果密码错误,输出一次“密码错误”,如果密码正确,输出“密码正确”。

x=1
for i in range (3):
    a=str(input())
    if a=="123":
        print("密码正确")
        break
    else:
        print("密码错误")

九:求正奇数的个数

任务:给定一个正整数 n,统计小于等于 n 的正奇数的个数。n 通过 input 获取。如果输入的数据小于或者等于 0,则输出“输入数据不合法”。

x=0
y=0
num=eval(input())
for i in range (1,num+1):
    if i%2==0:
        continue
    x+=1
    y+=1
if y==0:
    print("输入数据不合法")
else:
    print(f"正奇数个数为{x}")

十:温度转换表

任务:构造-20到50摄氏度的摄氏-华氏温度对应表。本关的摄氏温度值都为整数。温度表中的温度跨度为1度。数字与---之间有一个空格。

输出格式:

摄氏度---华氏度

-20 ---> -4.000000

-19 ---> -2.200000

   ···

   ···

50 ---> 122.000000


min_temp = -20    # 最小温度值
max_temp = 50     # 最大温度值

print("摄氏度--->华氏度")     # 打印出表的第一格

# 使用while循环并按照输出格式打印出摄氏-华氏温度对应表
c=-20 
while c<51:
   f=c*1.8+32
   print(f"{c} ---> {f:.6f}")
   c=c+1

十一:循环结构之for循环实现阶乘计算

任务:使用 for 循环计算某个正整数的阶乘,这个数通过 input 函数获取。如果输入的数不为正整数,则输出“输入数据不合法”。

注意:0 的阶乘为 1。

x=1
num=int(input())
if num<0:
    print("输入数据不合法")
elif num==0:
    print("0的阶乘为1")
else:
    for i in range (1,num+1):
        x=x*i
    print(f"{num}的阶乘为{x}")

十二:循环结构之for循环实现奇偶数统计

任务:分别统计给定的列表中奇数和偶数的个数。

list_value = [1, 2, 18, 7, 33, 22, 1045, 98, 78, 36, 10, 111, 105, 4320, 1014, 50, 63, 15, 18, 910, 2010, 3201, 2501, 25, 120, 320]
 

js=0
os=0
for i in range (len(list_value)):
    if list_value[i]%2 == 0:
        os+=1
    else:
        js+=1

print("奇数共%d个,偶数共%d个"% (js,os)) 

十三、循环结构之for…else…之寻找水仙花数

任务:给定一个整数 n,判断 n 以内的正数是否含有水仙花数,n 通过 input 获取;

如果有,输出“有水仙花数”,如果没有,则输出“没有水仙花数”。

x=eval(input())
for i in range (100,x):
    a=i%100%10
    b=i%100//10
    c=i//100
    y=(a**3)+(b**3)+(c**3)
    if y==i:
        print("有水仙花数")
        break
else:
    print("没有水仙花数")

十四、循环结构之break之判断素数

任务:判断给定的整数是否是素数。该整数是通过 input 获取。如果输入的数小于1,则输出“输入数据不合法”。

num=eval(input())
x=2
y=1
if num <1:
    print("输入数据不合法")
while x0:
    print("是素数"

十五、循环结构之while循环打印九九乘法表

任务:使用while循环打印出九九乘法表。注意每行算式间有一个空格,每一行的末尾有一个空格,乘号使用的是 x。

i=0
while i <= 9:
    j = 1
    while j <= i:
        print(f'{i}x{j}={j*i}', end=' ')
        j += 1
    print('')
    i += 1

十六、判断素数

任务:给定一个正整数 n,这个正整数通过 input 获取,统计 2 到 n 的素数个数是否超过了 10 个。

如果超过了 10 个,则输出“素数数量超过10个”,如果少于 10 个,则输出“素数数量少于10个”,如果输入的数是 0 或 1,则输出“输入数据不合法”。

n=eval(input())
x=0
if n==0 or n==1:
    print("输入数据不合法")
else:
    for num in range(2,n+1):
        if num==2:
            x+=1
        else:
            for i in range(2,num):
                if num%i==0:
                    break
            else:
                x+=1
    if x>10:
        print("素数数量超过10个")

十七、循环结构之while循环实现凯撒密码加密

任务:编写代码实现凯撒密码加密,密码只能为大写字母,原密码和偏移量都通过input函数获取。需要考虑边界效应,如果密码超过了Z,则重新用A、B、C...表示。

本题采用两种循环方式 一种是while循环 另一种是for循环 相比于while循环 for循环更加简洁 while循环要设立循环控制变量的初值并且每循环一次控制变量就需要自增。

key=str(input())
p=int(input())
list1=[]
list2=[]
i=0
j=0
k=0
while i= 90 or ord(list1[j]) + p >= 122:
        list2.append(chr(ord(list1[j]) - 26 + p))
        j += 1
    else:
        list2.append(chr(ord(list1[j]) + p))
        j += 1
while k < len(list2):
    print(list2[k],end="")
    k += 1

你可能感兴趣的:(python基础,python,学习)