python实战之循环结构

目录

一、打印简单图案

1.直角三角形分析:

2.奇数直角三角形分析:

3.反直角三角形分析:

 4.等腰三角形分析: 

5.倒等腰三角形分析:

6.菱形分析:

7.空心菱形分析:

二、判断一个数是否为质数(素数)

三、有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?

四、编程求一个四位自然数ABCD,它乘以A后变成DCBA

五、用户输入两个数a、b。如果a能被b整除或a加b大于1000,则输出a;否则输出b。

六、请输入一个数,判断这个数是偶数还是奇数,如果使用偶数,请判断从1到该数是3的倍数有哪些,如果是奇数,请判断从1到该数是5的倍数有哪些

七、某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折).小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?

八、鸡兔同笼,从上面看有35个头,从下面看有94只脚,请问鸡有几只,兔有几只?

九、猜数字游戏(使用random模块完成) 电脑随机一个范围内的数,用户输入数据判断, 如果数大了,提供”数大了“ 成功之后,加上用户是否继续功能

十、猜拳游戏:石头、剪刀、布的游戏


一、打印简单图案

1.直角三角形分析:

        随着行数(i)的增加,列数(j)也在增加,不难发现存在一个i=j的关系,所以可以利用一个双层循环打印出图案。

2.注意事项:

  (1)python中的print函数默认输出后换行,所以需要在后面加上end=" "或者end=“/t”(占位符)取消掉自带的自动换行功能。

  (2)注意对齐,缩进的位置会影响参数被包含的意义

c=int(input("请输入打印的层数:"))

i=1
while  i<=c:
    j=1
    while j<=i:
            print("*",end="")    #end=""是用来取消自动换行的功能
            j+=1
   print()       #用来换行
   i+=1

2.奇数直角三角形分析:

          跟第一图案相比,这个行列满足 j=2*i+1 ,所以在控制列数的时候把条件更改为此关系即可

2.1注意:

        此处对于行列的初始值赋值有所变化,因为需要满足上述条件的话需要初始值为0,而不是1,后续的比较<=也要更改为<

    range(start, end) 表示[start, end)的区间内的所有整数 左闭右开

#第一种方法

i=0  
while i<c : #外层循环
        j=0
        while j<(2*i+1):    #内层循环
                print("*",end="")
                j+=1
        print()
        i+=1

#第二种方法


c=int(input())

for i in range(1,c+1):    外层循环 1到c
    
    for j in range(1,2*i):   内层循环 1到2*i-1

        print("*",end="")
    print()

3.反直角三角形分析:

        此处相比较于第一个图案,是一个对称图形。这里的行列关系依旧是 i=j, 但是值得关注的是输出每一行的最后一个*是对齐最后一行的最后一个*,其实也就形成了c-i个空格位置,所以先输出空格最后输出*     用for循环可以并列输出空格和*

3.1注意:

注意range函数的范围表达

c=int(input("请输入打印的层数:"))

for i in range(1,c+1):
    for j in range(c-i):
         print(" ",end="")
    for j in range(i):
         print("*",end="")
    print()

    #或者再进一步简化
    for i in range(c):
         print(" "*(c-i-1),end="")
         print("*"*(i+1))

 4.等腰三角形分析: 

可以观察到这个图形其实和奇数直角三角形不同在于每个星星的位置,这个地方不需要管星星后半段的空格 只需要把前半段的空位占住就OK了,从而星星的位置也确定好了,而每行星星的个数就是行数2*i-1(i起始为1)

4.1注意:range(8)代表range(0,8)取八个整数0,1,2,3,4,5,6,7

c=int(input("请输入层数:"))

for i in range(1,c+1):
    for j in range(c-i):
        print(" ",end="")
    for j in range(2*i-1):
        print("*",end="")
    print()


#简化
    for i in range(1,c+1):
        print(" "*(c-i),end="")
        print("*"*(2*i-1))        

5.倒等腰三角形分析:

和上个例子的循环条件是倒着来的,range(a,b,c)是指从a到b,每一次走c个单位长度

    for i in range(c,0,-1):
        print(" "*(c-i),end="")
        print("*"*(2*i-1))        

6.菱形分析:


c=int(input("请输入层数:"))

while c%2==0:
        c=int(input("警告!!请输入奇数行:"))
#上半部分
for i in range(1,c//2+2):
        print(" "*(c-i),end="")
        print("*"*(2*i-1))   
#下半部分

for i in range(c//2,0,-1):
        print(" "*(c-i),end="")
        print("*"*(2*i-1))        

7.空心菱形分析:

c=int(input("请输入层数:"))

while c%2==0:
        c=int(input("警告!!请输入奇数行:"))
#上半部分
for i in range(1,c//2+2):
        print(" "*(c-i),end="")
        for j in range(2*i-1):
                if j==0 or j==2*i-2:
                        print("*",end="")
                else:
                        print(" ",end="")
        print()   
#下半部分

for i in range(c//2,0,-1):
        print(" "*(c-i),end="")
        for j in range(2*i-1):
                if j==0 or j==2*i-2:
                        print("*",end="")
                else:
                        print(" ",end="")
        print()         

8.对角线菱形

c=int(input("请输入层数:"))

while c%2==0:
        c=int(input("警告!!请输入奇数行:"))
#上半部分
for i in range(1,c//2+2):
        print(" "*(c-i),end="")
        for j in range(2*i-1):
                if j==0 or j==2*i-2 or i==c//2+1 or j==i-1:
                        print("*",end="")
                else:
                        print(" ",end="")
        print()   
#下半部分

for i in range(c//2,0,-1):
        print(" "*(c-i),end="")
        for j in range(2*i-1):
                if j==0 or j==2*i-2 or j==i-1:
                        print("*",end="")
                else:
                        print(" ",end="")
        print()   

二、判断一个数是否为质数(素数)

2.1分析:

        利用穷举方法,在数学中判断质数的方法就是如果一个数只有1和它本身两个公因数,那么他就是质数,所以在这里我们通过这个特点,利用标记的是否与if判断来区分素数和合数。

2.2注意:

        当我们判断一个较大的数时,计算机会不断地在循环,但这个对于这个题型没有任何意义,所以在一次判断过后我们即可以跳出循环,避免不必要的CPU浪费。 if可以单独出现,不一定非得接上else,具体情况具体分析。

num=int(input("请输入一个数:"))

flag=True
for i in range(2,num):
    if num%2==0:
        flag=False
        break
if flag:
    print("是质数")
else:
    print("不是质数")

三、有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?

3.1分析:

这个四位数的特点是 百位数是3,十位数是6,个位数是偶数,四个数相加还必须是三的公倍数。还需要输出这种数的最大和最小,那么就利用一个交换函数,比较出最大和最小。

3.2注意:

          append() 函数可以向列表末尾添加元素。因为涉及到比较大小,所以需要用到数组。

nums = []
for i in range(1000, 10000): # 1234
	q = i // 1000
	b = i % 1000 // 100
	s = i % 100 // 10
	g= i % 10
	if b == 3 and s == 6 and i % 6 == 0:
		nums.append(i)
print(f"最大值是{max(nums)}\n最小值是{min(nums)}")

四、编程求一个四位自然数ABCD,它乘以A后变成DCBA

n = 1000
while n <= 9999:	
	A = n // 1000 #千
	B = (n % 1000) // 100
	C = (n % 100) //10
	D = n % 10
    if n * A == (D * 1000 + C * 100 + B * 10 + A):
		print(n)
n+= 1

五、用户输入两个数a、b。如果a能被b整除或a加b大于1000,则输出a;否则输出b。

a = int(input("请输入第一个数"))
b = int(input("请输入第二个数"))
if (a % b == 0) or (a + b > 1000):
	print(a)
else:
	print(b)

六、请输入一个数,判断这个数是偶数还是奇数,如果使用偶数,请判断从1到该数是3的倍数有哪些,如果是奇数,请判断从1到该数是5的倍数有哪些

num = int(input("请输入一个数"))
if num % 2 == 0: # 偶
	for i in range(1, num+1):
		if i % 3 == 0:
			print(i)
 
else: # 奇
	for i in range(1, num+1):
		if i % 5 == 0:
			print(i)

七、某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折).小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?

clothes_price = 35
trousers_price = 120
clothes_num = int(input("请输入小明买了几件T恤"))
trousers_num = int(input("请输入小明买了几条裤子"))
if clothes_num == 2 or clothes_num == 3:
	clothes_price = clothes_price * 0.9 
 
elif clothes_num > 3:
	clothes_price = clothes_price * 0.8
 
elif trousers_num > 2:
	trousers_price = trousers_price *0.9
 
else :
	clothes_price = clothes_price 
	trousers_price = trousers_price
print(f"小明应付{clothes_price * clothes_num + trousers_price * trousers_num}元")

八、鸡兔同笼,从上面看有35个头,从下面看有94只脚,请问鸡有几只,兔有几只?

for robbit in range(1, 35):
	chook = 35 - robbit
	if 4 * robbit + 2 * chook == 94:
		print(f"鸡有{chook}只,兔有{robbit}只")

九、猜数字游戏(使用random模块完成) 电脑随机一个范围内的数,用户输入数据判断, 如果数大了,提供”数大了“ 成功之后,加上用户是否继续功能

import random
computer = random.randint(0, 99)
 
while True:
	guess = int(input("请输入您要猜的数字"))
	if guess < computer:
		print("猜小了,请继续")
	elif guess > computer:
		print("猜大了,请继续")
	else:
		print("恭喜您,猜对了")
		yn = input("请输入您是否要继续游戏 是【Y/y】, 否【N/n】")
		if yn == "Y" or yn == "y":
			computer = random.randint(0, 99)
		else:
			print("游戏结束")
			break

十、猜拳游戏:石头、剪刀、布的游戏

print("石头(0)、剪刀(1)、布(2)")
# 石头(0)、剪刀(1)、布(2)
while True:
	computer = random.randint(0,3)
	player = int(input("请开始(石头/剪刀/布)"))
	
	if ((player == 0)and(computer == 1)) or ((player == 1)and(computer == 2)) or ((player == 2) and (computer == 1)):
		print("您赢了")
		yn = input("请输入您是否要继续游戏 是【Y/y】, 否【N/n】")
		if yn == "Y" or yn == "y":
			computer = random.randint(0, 99)
		else:
			print("游戏结束")
			break
	elif player == computer:
		print("平局")
		yn = input("请输入您是否要继续游戏 是【Y/y】, 否【N/n】")
		if yn == "Y" or yn == "y":
			computer = random.randint(0, 99)
		else:
			print("游戏结束")
			break
	else:
		print("computer赢了")
		yn = input("请输入您是否要继续游戏 是【Y/y】, 否【N/n】")
		if yn == "Y" or yn == "y":
			computer = random.randint(0, 99)
		else:
			print("游戏结束")
			break

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值